---
title: U3Helper
language: en
layout: default
created: 2009-02-28 02:26:46 +0100
updated: 2009-09-12 01:38:44 +0200
toc: false
tags:
  - software
  - autohotkey
  - u3helper
---
Preface
=======

Being proud owner of a [U3 capable]({% post_url 2011-07-22-u3 %}) flash drive, I wanted to add some of the tools I use
everyday but which were not U3 compatible.

Running a U3 program from the LaunchPad basically does the following things:

1. unpack the `.u3p` package (which is a `.zip`) to your local `Application Data\U3` directory
1. run the *hostConfigure* command from the manifest file (once per session)
1. run the *appStart* command from the manifest file (this starts the application)

Ejecting the U3 drive does the following for all programs which were ran in that session:

1. if the program is still running, run the *appStop* command from the manifest file
1. run the *hostCleanUp* command from the manifest file

Most programs store their settings in a key in the Windows registry. Some others need an `.ini` file in their folder.
So in both cases it's relatively easy to move them to another location and run them from there.

After I had successful runs using a batch file for *hostConfigure* which imported a registry file and another batch
file for *hostCleanUp* which exported the new settings to that file, I wanted to create a tool which automates most
steps neccessary for a program to run.

So the **U3Helper** was born.

The first version got too complicated after a while and so I started from scratch. The result it this tool.


Usage
=====

This manual assumes you already know which registry branches and/or configuration files and/or OCXes/DLLs your
application uses.


Manifest file
-------------

Make the `actions`-section of your `manifest.u3i` look like this (the parameters in the `appStart` tag are for *WebMon*,
not for the U3Helper):

{% highlight xml %}
  <actions> 
    <hostConfigure cmd="%U3_DEVICE_EXEC_PATH%\..\..\0f90f88c-5e05-4cab-8c3a-e1c0112b06fd\Exec\U3Helper.exe">config</hostConfigure> 
    <appStart workingdir="%U3_APP_DATA_PATH%" cmd="%U3_HOST_EXEC_PATH%\WebMon.exe">-prefs "%U3_APP_DATA_PATH%\WebMon.ini" -pages "%U3_APP_DATA_PATH%\pages\WebPages.dat"</appStart> 
    <appStop cmd="%U3_HOST_EXEC_PATH%\U3Helper.exe">appstop</appStop> 
    <hostCleanUp cmd="%U3_HOST_EXEC_PATH%\U3Helper.exe">unconfig</hostCleanUp> 
  </actions>
{% endhighlight %}

<p><div class="noteclassic" markdown="1">
Note: The GUID `0f90f88c-5e05-4cab-8c3a-e1c0112b06fd` is that of the U3Helper, NOT the one of the application of that
manifest!
</div></p>

If the application writes something to `%USERPROFILE%\Application Data`, change the `appStart` line to look like this:

    <appStart cmd="%U3_HOST_EXEC_PATH%\U3Helper.exe">appstart</appStart>

This way, the U3Helper will change some environment variables for the launched application so that it stores all
user-data on the flash drive instead of on the local harddisk.


U3Helper.ini
------------

Now create a file `U3Helper.ini` and put it into the `host` directory in your U3 package so that it gets extracted
to `%U3_HOST_EXEC_PATH%`.

Here is a template:

{% highlight ini %}
[U3Helper] 
AppName=PC OnPoint 
AppExe=PConPoint.exe 

; enter commandlines to run before stopping the application and before 
; ejecting the device. All variables mentioned under [FileDelete] work. 
RunBeforeStop= 
RunBeforeEject= 

; set Unattended to 1 to suppress settings-related questions 
; this way, previously existing settings on the host always get 
; replaced by the U3's settings and restored on eject 
Unattended=0 

[RegBackup] 
; enter registry branches to be backed up (+deleted) on eject 
; and restored on first run 
; SHORTCUTS (HKCU, HKLM,...) DON'T WORK! 
HKEY_CURRENT_USER\Software\PC OnPoint 

[RegDelete] 
; enter registry branches to be just deleted without backup 

[regsvr32] 
; enter filenames to be registered using regsvr32 
; these files are assumed to be in %U3_HOST_EXEC_PATH% 
CCListBar.ocx 

[DataToExecDir] 
; enter filenames or foldernames to be copied to the %U3_HOST_EXEC_PATH% 
; and copied back to %U3_APP_DATA_PATH% afterwards 
; ONLY SIMPLE NAMES, NO PATHS OR WHATSOEVER! 
safe.dat 
safe.ind 

[ParseIniFiles] 
; enter filenames of .ini-files to be parsed for env vars on hostConfigure 
; and re-replace the paths by envvars on hostCleanUp. The files should reside 
; in %U3_APP_DATA_PATH% 
test.ini 

[FileDelete] 
; enter filenames or foldernames to be deleted on eject 
; Environment variables working (case sensitive!): 
; %ALLUSERSPROFILE%, %APPDATA%, %CommonProgramFiles%, %HOMEPATH%, 
; %ProgramFiles%, %SystemRoot%, %TEMP%, %USERPROFILE%, %WINDIR%, 
; %U3_APP_DATA_PATH%, %U3_DEVICE_DOCUMENT_PATH%, %U3_DEVICE_EXEC_PATH% 
%ALLUSERSPROFILE%\Application Data\Spybot - Search & Destroy 

[EnvPath] 
; enter folders to be added to the PATH environment variable 
; upon running the application. All variables mentioned under 
; [FileDelete] get replaced. 
%U3_HOST_EXEC_PATH%\lib\gtk\bin
{% endhighlight %}

* All registry keys listed under **`[RegBackup]`** are being backed up on eject of the U3-stick to sequential files
  (`regdata1.reg`, `regdata2.reg` and so on) in `%U3_APP_DATA_PATH%` and afterwards, the keys are deleted from the host
  machine. Also those branches are inserted back into the registry upon the first launch of that app after plugging in
  the stick.
    * if you put a file `regdataX.reg` into the `data` directory in your U3 package, this file gets imported into the
      registry after all other files have been processed. But this file never gets overwritten by a newer dump so it's
      perfectly to enforce some settings the program changes every time, like relative paths into absolute paths.
  * The section **`[RegDelete]`** just deletes those keys upon eject.
  * Under **`[regsvr32]`** you can list all `.ocx` or `.dll` files which should be registered before launching the app
    and unregistered on eject. The files are assumed to be in `%U3_HOST_EXEC_PATH%`.
  * Finally **`[DataToExecDir]`** lists files which should be copied into the directory containing the application
    (many applications insist on their config-files lying where the `.exe` lies) and back to `%U3_APP_DATA_PATH%` on eject.


Download
========

* [u3helper.zip]({{ site.url }}/assets/u3helper.zip) version 2.1, April 2007, incl. sources
* [u3helper.u3p]({{ site.url }}/assets/u3helper.u3p) version 2.4, June 2008


See also
========

<ul>
{% for page in site.categories.u3helper %}
  <li><a href="{{ page.url }}">{{ page.title }}</a>{% if page.language == 'de' %} (German){% endif %}</li>
{% endfor %}
</ul>
