[App] ROM Flashing Junkies: User Customization is here!

Search This thread

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
What is UC? It is a feature contained in UC capable ROMs. A UC capable ROM extends initial customization to your SD card so you can load cabs and install XML files that are located there too. What this means is that once you get your customization scripts right, you can flash any UC capable ROM and all your apps and settings will be restored as part of the initial customization process whenever your SD card is inserted in the slot. :eek:

Here's a sampling of UC capable ROMs:

Himalaya ROMs
Kaiser ROMs
Herald ROMs
Vogue ROMs
Titan ROMs
Prophet ROMs
Elf ROMs
Wizard ROMs
Hermes ROMs
Trinity ROMs

Here's the current list of UC related software tools


If you are a ROM chef and want to make your own ROM UC capable, then go here to learn how. The effort is trivial btw.

Ok, on to creating scripts!

First you need to read a short WiKi article on customization that's located here

How do you set up UC? By placing a file called "SDConfig.txt" in the root directory of your storage card. The best way to illustrate this is to show examples. Here is my SDConfig.txt:
Code:
LOCK:Enabled
CAB: \Storage Card\Cabs\Tiltkeyboardfix.cab
CAB: \Storage Card\Cabs\removeHiddenProxy4CWS_0522.cab
CAB: \Storage Card\Cabs\s2u2v99c.cab
CAB: \Storage Card\Cabs\CapScrUtil.CAB
CAB: \Storage Card\Cabs\Communicator mobile.cab
CAB: \Storage Card\Cabs\CorePlayer.PocketPC.cab
CAB: \Storage Card\Cabs\HTC_GPS_TOOL.cab
CAB: \Storage Card\Cabs\SpbBackup.cab
CAB: \Storage Card\Cabs\SpbPocketPlus4.arm.cab
CAB: \Storage Card\Cabs\SpbTime2.arm.cab
CAB: \Storage Card\Cabs\SpbWeather.arm.cab
CAB: \Storage Card\Cabs\SplashID.CAB
CAB: \Storage Card\Cabs\SplashPhoto.CAB
CAB: \Storage Card\Cabs\SPTimeSync.cab
CAB: \Storage Card\Cabs\stdtime.PPC30_ARM.CAB
CAB: \Storage Card\Cabs\tomtom_6_032_8351.cab
CAB: \Storage Card\Cabs\VisualGPSceInstall.CAB
CAB: \Storage Card\Cabs\ip.PPC_ARM.CAB
CAB: \Storage Card\Cabs\SleuthKaiserVoip.cab
CAB: \Storage Card\Cabs\TPGProvisioning.cab
CAB: \Storage Card\Cabs\GSM610.CAB
CAB: \Storage Card\Cabs\GoogleMaps_compressed.CAB
CAB: \Storage Card\Cabs\LiveSearch.cab
CAB: \Storage Card\Cabs\Pieff.cab
XML: \Storage Card\Cabs\SleuthProvisioning.xml
LOCK:Disabled
RST: Reset

Here are some important facts to remember:
  • end your file with the "RST: Reset" command
  • The file cannot be UNICODE
  • All commands must be in UPPER CASE. CAB: is valid but Cab: is not. Case is not important in the parameter portion however: \Storage Card\CABS\myCAB.cab is the same as \storage card\cabs\mycab.cab.
  • Cabs that specifically wait for additiional user input (other than the initial location) can be loaded but require special grouping. An example of this is the 1-calc installation which stops and makes you accept a license agreement. Go here to find out how to load these. Thanks booda!
  • Tabs/Spaces at the end of a line are not allowed and will cause SDAutoRun to abort on a file not found error.
  • The first 5 characters of a line are reserved for the command. The parameter for the command must begin on the 6th character That means to add one space to 4 character commands like "CAB:" and no spaces to 5 character commands like "HIDE:".

In my next post, I'll go over settings customization by showing you SleuthProvisioning.xml.
 
Last edited:

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
Settings customization is pretty advanced stuff. You might want to get going first by simply using User Customization to install some cabs. If I were first starting out, I'd install cabs that customize my device. For example, I have a Tilt, so I would install a Keyboard patch cab for the Tilt layout and another cab that disables the AT&T hidden proxy. This would require two CAB: statements in SDConfig.txt.

However, if you're yearning to do more settings customization, then the "XML:" config statement is the key. Here's my XML provisioning file called SleuthProvisioning.xml. It initializes me in cleartype mode, changes my notification settings, initializes the default SIP to Block Recognizer, sets power and backlight timeouts, re-arranges my today screen and updates my Owner Name. :)

Code:
<wap-provisioningdoc>

<!-- ClearType Preferences -->

<characteristic type="Registry">
<!-- Just adding this Key enables ClearType -->
  <characteristic type="HKLM\System\GDI\CLEARTYPE"> 
     <parm name="Default" value="0" datatype="integer"/> 
     <noparm name="Default"/> 
  </characteristic>
  <characteristic type="HKLM\System\GDI\ClearTypeSettings">
     <parm name="OffOnRotation" value="0" datatype="integer"/> 
  </characteristic>

<!-- Owner Preferences -->

  <characteristic type="HKCU\ControlPanel\Owner">
     <parm name="Name" value="Sleuth 255" datatype="string"/> 
<!-- Owner value is SZ_BINARY: 320 Unicode characters (640 bytes).  XML "Binary" datatype processes this as Base64-->
     <parm name="Owner" value="SwBlAaSwDyuuIIgvrRRvAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" datatype="binary"/>
  </characteristic>

<!-- Notification Preferences -->

<!-- New Email Message -->
  <characteristic type="HKCU\ControlPanel\Notifications\{A877D65A-239C-47a7-9304-0D347F580408}">
     <parm name="Options" value="2" datatype="integer"/> 
  </characteristic>
<!-- Reminders -->
  <characteristic type="HKCU\ControlPanel\Notifications\{15F11F90-8A5F-454c-89FC-BA9B7AAB0CAD}">
     <parm name="Options" value="1073741833" datatype="integer"/> 
  </characteristic>

<!-- Power/Backlight Timeout Preferences -->

  <characteristic type="HKCU\ControlPanel\BackLight">
     <parm name="BatteryTimeout" value="240" datatype="integer"/> 
     <parm name="ACTimeout" value="360" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\System\CurrentControlSet\Control\Power\Timeouts">
     <parm name="ACSuspendTimeout" value="300" datatype="integer"/> 
     <parm name="BattSuspendTimeout" value="180" datatype="integer"/> 
  </characteristic>

<!-- Application Preferences -->


  <characteristic type="HKCU\Software\The Paradigm Group\sipchange\Parameters">
     <parm name="DefaultSIP" value="Block Recognizer" datatype="string"/> 
     <parm name="Delay" value="10" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKCU\Software\Spacreat\SP TimeSync\General settings">
     <parm name="Start minimized" value="Yes" datatype="string"/> 
  </characteristic>
  <characteristic type="HKCU\Software\Spacreat\SP TimeSync\NTP client">
     <parm name="Autosync period" value="21600" datatype="string"/> 
  </characteristic>
<!-- Silent Keyboard Sliding Sound -->
  <characteristic type="HKLM\Software\HTC\SlidingSound">
     <parm name="ActiveSlidingSound" value="0" datatype="integer"/> 
     <parm name="SlidingSoundEffect" value="0" datatype="integer"/> 
  </characteristic>

<!-- Today Screen Order/Enabled Preferences -->

  <characteristic type="HKLM\Software\Microsoft\Today\Items\HTC Home">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="0" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\Windows Live Search">
     <parm name="Enabled" value="1" datatype="integer"/> 
     <parm name="Order" value="1" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Messaging"">
     <parm name="Enabled" value="1" datatype="integer"/> 
     <parm name="Order" value="5" datatype="integer"/> 
  </characteristic>
    <characteristic type="HKLM\Software\Microsoft\Today\Items\"Calendar"">
     <parm name="Enabled" value="1" datatype="integer"/> 
     <parm name="Order" value="20" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Tasks"">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="21" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"TomTom"">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="22" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\Windows Live">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="23" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Pocket Plus"">
     <parm name="Enabled" value="1" datatype="integer"/> 
     <parm name="Order" value="24" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Spb Weather"">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="26" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Spb Time"">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="28" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Spb Backup"">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="42" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\"Owner Info"">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="46" datatype="integer"/> 
  </characteristic>
  <characteristic type="HKLM\Software\Microsoft\Today\Items\Getting Started">
     <parm name="Enabled" value="0" datatype="integer"/> 
     <parm name="Order" value="47" datatype="integer"/> 
  </characteristic>
</characteristic>

<-- File Operations -->
<-- Copy the SP Timesync link to startup so it gets executed whenever I reset -->

<characteristic type="FileOperation">
   <characteristic type="%CE2%\Startup" translation="install">
     <characteristic type="MakeDir" /> 
        <characteristic type="StartTimeSync.lnk" translation="install">
           <characteristic type="Copy">
           <parm name="Source" value="\windows\Start Menu\Programs\SP TimeSync.lnk" translation="install" /> 
        </characteristic>
     </characteristic>
  </characteristic>
</characteristic>
</wap-provisioningdoc>

Lets take a look at this more closely. The XML itself sets up two Configuration Service providers. One is used for registry operations and one for file operations. both are enclosed by the wap-provisioning tags. Here they are shown without any operations:

Code:
<wap-provisioningdoc>
<characteristic type="Registry">
</characteristic>
<characteristic type="FileOperation">
</characteristic>
</wap-provisioningdoc>

Registry CSPs

Within the registry type, I set a lot of cool stuff. You should be able to firgure out how it works if you have basic registry skills. Essentially, setting values for any registry key looks like this:
Code:
  <characteristic type="HKCU\ControlPanel\BackLight">
     <parm name="BatteryTimeout" value="240" datatype="integer"/> 
     <parm name="ACTimeout" value="360" datatype="integer"/> 
  </characteristic>

First you set the key with the <characteristic type> tag, then you set values with the <parm name> tags. Binary values are a PITA since they're encoded Base 64 (see my entry for Owner Information above). If you want to set owner information as I did in the example, then you need to convert Unicode to Base64. Post here if you want to learn how and I'll show you how I do it.

Special characters within quotes in XML files must be represented using html special character sequences. For instance, the double quote (") character sequence is " so "Today\Items\"Pocket Plus"" would be written as "Today\Items\"Pocket Plus"". The full list of special HTML character sequences can be found here. This is especially important when changing today screen plugin order since some today screen registry entries actually have quotes in the key name. See my provisioning file above under "Today Screen order/enabled preferences" for an example of this.
 
Last edited:

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
File Operation CSPs

All the File Operation CSP parameters are described here.

Here's mine:
Code:
   <characteristic type="%CE2%\Startup" translation="install">
     <characteristic type="MakeDir" /> 
        <characteristic type="StartTimeSync.lnk" translation="install">
           <characteristic type="Copy">
           <parm name="Source" value="\windows\Start Menu\Programs\SP TimeSync.lnk" translation="install" /> 
        </characteristic>
     </characteristic>
  </characteristic>

%CE2% is a shorthand way for saying "\windows". As you can see, the first characteristic types set the working directory to \windows\startup, the destination file to "StartTimeSync.lnk" and the file operation to "Copy". Finally, the source file is set and the CSP copies \windows\SP TimeSync.lnk to \windows\startup\StartTimeSync.lnk.

Here's a great example from booda. It shows shortcut creation, move, directory creation and remove operations:
Code:
<characteristic type="FileOperation">

<!--Create folder in Programs called "Docs and Ref" and move Google Maps shortcut into it-->

<characteristic type="%CE2%\Start Menu\Programs\Docs and Ref" translation="install">
<characteristic type="MakeDir" />

<characteristic type="Google Maps.lnk" translation="install">
<characteristic type="Move">
<parm name="Source" value="%CE2%\Start Menu\Programs\Google Maps.lnk" translation="install"/> 
</characteristic>
</characteristic>

</characteristic>

<!--Create "Doom" shortcut from exe on storage card and copy it into Games folder-->

<characteristic type="%CE2%\Start Menu\Programs\Games" translation="install">
<characteristic type="MakeDir" />

<characteristic type="gfDoom.lnk" translation="install">
<characteristic type="Shortcut">
<parm name="Source" value="\Storage Card\Games\Doom\gfDoom.exe" translation="install"/> 
</characteristic>
</characteristic>

</characteristic>

<!-- Move Office folder from Start Menu into Docs and Ref folder -->

<characteristic type="%CE2%\Start Menu\Programs\Docs and Ref\Office Mobile" translation="install">
<characteristic type="MakeDir" />

<characteristic type="Excel Mobile.lnk" translation="install">
<characteristic type="Move">
<parm name="Source" value="%CE2%\Start Menu\Programs\Office Mobile\Excel Mobile.lnk" translation="install"/> 
</characteristic>
</characteristic>

<characteristic type="icon.lnk" translation="install">
<characteristic type="Move">
<parm name="Source" value="%CE2%\Start Menu\Programs\Office Mobile\icon.lnk" translation="install"/> 
</characteristic>
</characteristic>

<characteristic type="OneNote Mobile.lnk" translation="install">
<characteristic type="Move">
<parm name="Source" value="%CE2%\Start Menu\Programs\Office Mobile\OneNote Mobile.lnk" translation="install"/> 
</characteristic>
</characteristic>

<characteristic type="PowerPoint Mobile.lnk" translation="install">
<characteristic type="Move">
<parm name="Source" value="%CE2%\Start Menu\Programs\Office Mobile\PowerPoint Mobile.lnk" translation="install"/> 
</characteristic>
</characteristic>

<characteristic type="Word Mobile.lnk" translation="install">
<characteristic type="Move">
<parm name="Source" value="%CE2%\Start Menu\Programs\Office Mobile\Word Mobile.lnk" translation="install"/> 
</characteristic>
</characteristic>

</characteristic>

<characteristic type="%CE2%\Start Menu\Programs\Office Mobile" translation="install">
<characteristic type="RemoveDir" />
</characteristic>

</characteristic>

booda said:
Couple of things to note - I always use "install" and "MakeDir" commands for folders - if the folder already exists, it won't do anything, and if it doesn't, the folder will be created. Either way, you know the folder will be there to move the shortcuts into.

The MakeDir and RemoveDir commands don't require a closing [/characteristic] tag - just make sure the slash is included as in the examples above.

You have to make sure that 1) any files you're referencing already exist and 2) you have the names exactly right. If you try to move a shortcut that isn't there or has a different name than what you referenced, the whole process bombs out.

Here are all the %CE#% shortcuts (thanks to chainfire)
Code:
%CE1%	\Program Files
%CE2%	\Windows
%CE3%	***Not Defined***
%CE4%	\Windows\Startup
%CE5%	\My Documents
%CE6%	\Program Files\Accessories
%CE7%	\Program Files\Communication
%CE8%	\Program Files\Games
%CE9%	***Not Defined***
%CE10%	***Not Defined***
%CE11%	\Windows\Start Menu\Programs
%CE12%	\Windows\Start Menu\Programs\Accessories
%CE13%	\Windows\Start Menu\Programs\Communication
%CE14%	\Windows\Start Menu\Programs\Games
%CE15%	\Windows\Fonts
%CE16%	***Not Defined***
%CE17%	\Windows\Start Menu

EMAIL2 CSPs

All the EMAIL2 CSP provisioning parameters are described here

Elosogrande7076 shows us how to provision a couple of email accounts below. To be safe, use GUID-GEN to generate unique GUIDs. This is because duplicate GUIDs will cause undefined results on your device.

Code:
<wap-provisioningdoc>
<characteristic type="EMAIL2">
 <characteristic type="{7B3D74EC-35D9-45e3-B8F3-E38F4B90D174}">
  <parm name="SERVICENAME" value="Gmail" />
  <parm name="SERVICETYPE" value="IMAP4" />
  <parm name="INSERVER" value="imap.gmail.com" />
  <parm name="OUTSERVER" value="smtp.gmail.com" />
  <parm name="NAME" value="Username" />
  <parm name="AUTHNAME" value="login@gmail.com" />
  <parm name="AUTHSECRET" value="password" />
  <parm name="DOMAIN" value="" />
  <parm name="REPLYADDR" value="login@gmail.com" />
  <parm name="LINGER" value="15" />
  <parm name="RETRIEVE" value="-1" />
  <parm name="KEEPMAX" value="-1" />
  <parm name="DWNDAY" value="3" />
  <parm name="AUTHREQUIRED" value="1" />
  <parm name="SMTPALTENABLED" value="1" />
  <parm name="SMTPALTAUTHNAME" value="login@gmail.com" />
  <parm name="SMTPALTPASSWORD" value="password" />
  <parm name="SMTPALTDOMAIN" value="smtp.gmail.com" />
 </characteristic>
</characteristic>
<characteristic type="EMAIL2">
 <characteristic type="{877e6100-cd6d-4a44-bd4c-3edf4b901480}">
  <parm name="SERVICENAME" value="Gmail1" />
  <parm name="SERVICETYPE" value="IMAP4" />
  <parm name="INSERVER" value="imap.gmail.com" />
  <parm name="OUTSERVER" value="smtp.gmail.com" />
  <parm name="NAME" value="Username" />
  <parm name="AUTHNAME" value="login1@gmail.com" />
  <parm name="AUTHSECRET" value="password1" />
  <parm name="DOMAIN" value="" />
  <parm name="REPLYADDR" value="login1@gmail.com" />
  <parm name="LINGER" value="15" />
  <parm name="RETRIEVE" value="-1" />
  <parm name="KEEPMAX" value="-1" />
  <parm name="DWNDAY" value="3" />
  <parm name="AUTHREQUIRED" value="1" />
  <parm name="SMTPALTENABLED" value="1" />
  <parm name="SMTPALTAUTHNAME" value="login1@gmail.com" />
  <parm name="SMTPALTPASSWORD" value="password1" />
  <parm name="SMTPALTDOMAIN" value="smtp.gmail.com" />
 </characteristic>
</characteristic>
</wap-provisioningdoc>

XML Creation FAQ

1.- Why Provisioning file is not loaded, I mean, it doen't work nor load any registry or feature that I added to it?
Its probably a syntax error. Here's how I debug syntax:
  • first obtain a cab creation utility. For windows I use Cabarc, a free m$ utility
  • you can then rename your xml to _setup.xml and double click to load it into a browser. This will verify that your <tag></tag> nesting is correct along with validating tag statements. IE won't load an xml file in display mode if this isn't correct. As an added benefit, the error message will point to the exact line where the error occurs.
  • If it looks good, make a cab containing only _setup.xml itself and run it on your device. If the xml is good, installation will be successful & your changes will be made
  • if unsuccessful, use successive installs to isolate the part that isn't working.
2.- How I convert the HEX values showed at Registry Editor to base64 unicode? (I'm Mac user) It is for Owner registry stuff.
Being a Mac user, ymmv on this, but my technique using Windows is as follows:
  • create a Unicode file with your favorite text editor and enter your owner name (I use Windows Notepad for this, not sure what a Mac uses). Then pad it out to 320 characters with "%" characters.
  • now open that file with a Hex editor and do a global Hex replace on 25 (the hex representation of a "%") to 00. This produces a file containing the Unicode representation of your Owner name padded with binary zeros. I use WinHex for this btw.
  • Now browse to this site and select the file you've just created. Press "Convert the Source data". The Base64 data will appear.
  • Copy data to clipboard, paste into your editor (make sure word wrap is off) and remove all the newline characters (go to beginning of each line starting from bottom & press backspace). when complete, you will have one single line of base64 data. Now copy to clipboard & paste into my example.
  • Done!
Update: RapiConfig might be faster. See stan23's post located here. Download link is included.
 
Last edited:

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
Here's an easier way to create your provisioning XML files!
  • get the reg -> xml tool in the first post note: needs .net framework. My computer has .net v3.5 & it works fine.
  • load an app that can do registry exports on your device. The one I use is dotfred's task manager
  • export the key you want to provision & copy to desktop using activesync
  • fire up the tool, give it the .reg and it will create provxml that contains the Registry CSP you need
  • open provxml with notepad, cut out key you want & paste this into your provisioning xml within your registry CSP tags
  • done!
 
Last edited:

doedoe

Senior Member
Oct 13, 2006
181
0
Great work :)

Are you also supporting these functions?

SHOW:\Storage Card\MyImage.bmp
EXEC:\Storage Card\cusTSK.exe \Windows\MyTheme.tsk
EXEC:\windows\SetHSDPA.exe /Disable
CPY1:\Storage Card\MyFile.ext
CPY2:\My Documents\MyFile.ext

They were present with the orginal HTC AutoRun.exe's
 

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
I haven't gotten CPY1 and CPY2 to work. I'd make a cab to copy files itmt. EXEC: works just fine. I haven't tested SHOW: yet.

I'm acutally using AutoRun to parse btw. My program just configures the registry then runs AutoRun.exe again.

Note: many people have gotten CPY1 and CPY2 to work correctly The syntax is as follows:

CPY1: <source file to copy>
CPY2: <destination to copy to>

CPY2: must immediately follow CPY1:

YMMV on this command for sure. On a Kaiser, these commands don't appear to work properly.
 
Last edited:

taguapire

Senior Member
Nov 27, 2006
142
0
About install apps to Storage Card

Hi Sleuth,

There is a way for get apps installed in my Storage Card? I preffer this way because I want the memory device free for running applications.

Thanks in advance,

Taguapire.
 

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
sorry. AutoRun, by HTC design, cannot install apps to your storage card.

edit:

Actually, AutoRun installs cabs to the location specified by the cab itself. Most cabs don't specify a location however and in this case AutoRun chooses the device. However, you can override this behavior by using WinCE Cab Manager to create a cab that will only install to the Storage Card.
 
Last edited:

doedoe

Senior Member
Oct 13, 2006
181
0
I have been using this method to build devices since WM5 launched. I think that only the early versions of AutoRun.exe have the copy command - I have also seen a command which allowed you to pass additional Config.txt files...

Personally I use my own custom built AutoRun which works upon card being pushed in to the device (a 2577 autorun.exe) - This then does three things


  • [*]Looks for a hardcoded MyPersonalStuff.xml and pass to the Configuration.Manager - as above
    [*]Then look in a dir on the storage card and sequencially install each cab
    [*]Look for another hardcoded MyDeviceStuff.xml file and also configure it once the apps have been installed - reorg my start menu, populate custom application settings (Launchers etc) and do any device specific stuff.

This then allows me to configure all the os stuff first (generic to WM and all devices) install all my cabs, then apply a load of device and application specific suff - like re-ordering my start menu, set info for home screen launchers etc

Really this is just a set of application classes which can be used in any order - displaying a form and having a go button, read from a XML or flat file, device type validation, doing it all silently or whatever.

Do you want me to build you a custom version of AutoRun.exe with some new functionality? Extra commands, chosen file locations, the ability to install all cabs in a certain dir?

Got the code just need some help with requirements and a spec - the build part is easy :)
 

Sleuth255

Retired Senior Moderator
Mar 3, 2006
3,551
38
Milwaukee
blog.kwilcox.org
Actually, I'm hoping for an app that lets you select cabs & xml files then builds SDConfig.txt.

A bit more complex would be an preference configuration builder that would build an XML file based on user preferences then add it to SDConfig.txt.

I'll get to work on the first one shortly.

One thing I'm not sure of though: I fire off AutoRun.exe with a RUN parameter (otherwise it doesn't run on a Kaiser). Is this a universal requirement for all devices?
 

doedoe

Senior Member
Oct 13, 2006
181
0
Sound like one app to me - I have already started on something kinda like that anyway leave it with me for a few days ;)

That RUN command is hardcoded into the AutoRun.exe - the developer would have chosen this when he built the file.
 

taguapire

Senior Member
Nov 27, 2006
142
0
About Provisioning XML File

Hi Sleuth,

I tried to use the UC feature in your ROM, but I have few questions.

1.- Why Provisioning file is not loaded, I mean, it doen't work nor load any registry or feature that I added to it?
2.- How I can add to Provisioning all my Connection profiles including APNs, etc.?
3.- How I convert the HEX values showed at Registry Editor to base64 unicode? (I'm Mac user) It is for Owner registry stuff.
4.- Which are the registry settings for Arc Soft Message composer for MMS stuff?
5.- Can I configure my Exchange account using registry settings? If it is true, how I can do it?

I just did a search to the registry but I can't find any of above things.

Best Regards,

Taguapire.
 

stan23

Senior Member
Jun 29, 2006
160
9
Nürnberg
  • create a Unicode file with your favorite text editor and enter your owner name (I use Windows Notepad for this, not sure what a Mac uses). Then pad it out to 320 characters with "%" characters.
  • ...

But you only get your name into that base64 data.

You might type in the whole owner information once, then use RapiConfig with the following input (i.e. content of RapiConfigIn.xml)
Code:
<wap-provisioningdoc>
    <characteristic type="Registry">
        <characteristic type="HKCU\ControlPanel\Owner">
            <parm-query name="Owner"/>
            <parm-query name="Owner Notes"/>
        </characteristic>
    </characteristic>
</wap-provisioningdoc>
to extract it from the registry.

This is even better, because it get's the whole owner information including telephone number and email address:
Code:
<wap-provisioningdoc>
    <characteristic type="Registry">
        <characteristic-query type="HKCU\ControlPanel\Owner" recursive="true"/> 
    </characteristic>
</wap-provisioningdoc>

Same works for E-Mail
Code:
<wap-provisioningdoc>
    <characteristic-query type="EMAIL2" recursive="true"/>
</wap-provisioningdoc>
and Wi-Fi:
Code:
<wap-provisioningdoc>
    <characteristic-query type="Wi-Fi" recursive="true"/>
</wap-provisioningdoc>

Of course I don't know whether there is a RapiConfig for Mac users :(
 
Last edited:

booda

Member
Nov 27, 2006
39
0
[*] Cabs that specifically wait for additiional user input (other than the initial location) cannot be loaded. An example of this is the 1-calc installation which stops and makes you accept a license agreement.

Actually, you can load cabs that need user input - you just have to group those cabs together and use the Hide command. For instance:

Code:
LOCK:Enabled
CAB: \Storage Card\Cabs\Tilt_keyboard_fix.cab
CAB: \Storage Card\Cabs\Vibra_(Switch)_1.32.cab
LOCK:Disabled
HIDE:Enabled
CAB: \Storage Card\Cabs\ListPro-PocketPC-5.cab
CAB: \Storage Card\Cabs\eWallet-PocketPC-Install.cab
HIDE:Disabled
LOCK:Enabled
XML: \Storage Card\Cabs\device_settings.xml
XML: \Storage Card\Cabs\software_settings.xml
LOCK:Disabled
RST: Reset

In the above example, the screen is unlocked and the customization window is hidden before the ListPro & eWallet cabs are launched so you can provide the user input they require. Then the screen is relocked and the customization window is restored to finish installing other cabs/xml that don't require user input.

I just tried this on your v3.0 ROM (which is great, btw) and it worked fine. UC is fantastic, thanks for implementing such a useful feature.
 

Top Liked Posts