I saw early postings about RunOnceEx in this mailing list circa
January 2003, however the problems they presented were never fixed.
Some programs come with simple INF installers because
people can cheaply create an INF file, and use a free Setup.exe
bootstrap file that reads the name of an INF file from Setup.ini or
something similar. These programs do not have any way of processing
RunOnceEx themselves.
In the distant past before I had converted to Linux and wine, I used to
deal with such programs quite a bit;
RunOnceEx was Microsoft's way of allowing simple installers to register
files, especially if a reboot and wininit was necessary to overwrite files.
The basic structure of the registry format is:
[Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\Number]
"Number"="program.exe arguments"
"Number"="c:\\somepath\\somedll.dll|SomeExportedFunction"
Number is nothing more than a number. All commands are processed in
sequential order, first by key, then by value.
If there is no pipe symbol in the line ('|'), the data of the value is
executed as a program, with all following tokens passed on as arguments.
However, if the pipe symbol is included, the portion to the left is treated
as a DLL, and calls the exported function of the name to the right of the
symbol.
Once all values in a key are processed, the key is deleted, and the
process starts with the next key.
There is one subkey that has a special meaning: All keys/values in
[Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\Setup]
are not processed at boot-up. Rather, they are read by the program
runonce.exe, not included in wine. It is through this key that one
gets the annoying "Updating Windows" box in the upper left corner of
the screen, listing tasks being performed. I believe Powertoys for
Windows 98 utilized this feature, but I do not remember how.
However, these days RunOnceEx still has one important feature:
Some people, like me, have programs that fail to load objects
because the OS version is not set to XP. When the OS is set to
xp, the install-ie6 script does not automatically process the
RunOnceEx keys, failling to register all of the DLL's, including
the Crypto support needed for programs such as Steam.
As such, for IE6 alone, users have to process 50+ lines by hand,
in something that SHOULD be processed at bootup, via wineboot.