Using RunOnceEx

 

Introduction

There are many ways to deploy custom settings to your unattended install, such as using cmdlines.txt, svcpack.inf, and GuiRunOnce.  One method I'd like to highlight is using RunOnceEx.  This method allies you to deploy settings at either the 13 min mark of setup or before the first logon.

 

How RunOnceEx works

RunOnceEx is a part of the Windows Desktop Update.  It is run from this registry key:  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{89820200-ECBD-11cf-8B85-00AA005B4340}.  Obviously, don't delete this key!  The resources for RunOnceEx reside in iernonce.dll.  If you wanted to, you could use a resource editor such as Resource Hacker to change the text and icon RunOnceEx uses.  During setup the RunOnceEx key is only processed at the 13 min mark because of Outlook Express.  The RunOnceEx key is run before cmdlines.txt is run.  So if you use cmdlines.txt or svcpack.inf to import the runonceex settings they won't run until first logon.

 

PreReading

AaronXP has written a good guide on RunOnceEx here.  This guide will focus on using .inf files.
Syntax for the RunOnceEx Registry Key

 

Advantages and Disadvantages of using RunOnceEx

Pro:

Looks more professional (see screenshot below)
End user cannot cancel.  If the pc is rebooted, any unprocessed commands are run.

Cons:

Command syntax is a little bit harder than usual.

 

What it looks like

Below is a picture of what you will see when RunOnceEx is run.

 

Example of RunOnceEx

This is an Example of a working RunOnceEx that I will use to illustrate how to use RunOnceEx.

runonceex.inf

[Version]
Signature=$CHICAGO$

[DefaultInstall]
AddReg = RunXP

[XP]
AddReg = RunXP

[RunXP]
;http://support.microsoft.com/?kbid=232509
HKLM,"%RunOnceEx%\",Title,0,"Installing Applications"
HKLM,"%RunOnceEx%\",Flags,0x00010001,20
HKLM,"%RunOnceEx%\install01",,,"Adobe Acrobat 6"
HKLM,"%RunOnceEx%\install01",1,,"%10%\Apps\Adobe6\AdbeRdr60_enu_full.exe -p"""-s /v\"""/qn\"""
HKLM,"%RunOnceEx%\install03",,,"Directx 9"
HKLM,"%RunOnceEx%\install03",1,,"%10%\Apps\DX9\dxsetup.exe /OPK"
HKLM,"%RunOnceEx%\install04",,,"Nero Burning Rom 6"
HKLM,"%RunOnceEx%\install04",1,,"%10%\Apps\Nero\nero60028.exe /silent /noreboot"
HKLM,"%RunOnceEx%\install05",,,"Norton Antivirus Corp"
HKLM,"%RunOnceEx%\install05",1,,"%10%\Apps\Norton\navclnt.exe /qn"
HKLM,"%RunOnceEx%\install06",,,"R-Studio"
HKLM,"%RunOnceEx%\install06",1,,"%10%\Apps\RStudio\rss.exe /Q:A"
HKLM,"%RunOnceEx%\install07",,,"Raxco PerfectDisk"
HKLM,"%RunOnceEx%\install07",1,,"%11%\msiexec.exe /i %10%\Apps\Raxco\Perfectdisk.msi /q"
HKLM,"%RunOnceEx%\install08",,,"Winrar 3.20"
HKLM,"%RunOnceEx%\install08",1,,"%10%\Apps\Winrar\silent /s"
HKLM,"%RunOnceEx%\install09",,,"Windows Media Player 9.0"
HKLM,"%RunOnceEx%\install09",1,,"%10%\Apps\WMP9\mpsetupedp.msi"
HKLM,"%RunOnceEx%\install10",,,"Windows Support Tools"
HKLM,"%RunOnceEx%\install10",1,,"%10%\Apps\SupTools\Suptools.msi /qb"
HKLM,"%RunOnceEx%\ZZcleanup",,,"Cleaning up"
HKLM,"%RunOnceEx%\ZZcleanup",1,,"%10%\Apps\cleanup.bat"
HKLM,"%RunOnceEx%\ZZcleanup",2,,"%11%\cmd.exe /c rd /S /Q %10%\Apps"
HKLM,"%RunOnceEx%\ZZcleanup",3,,"%11%\cmd.exe /c del /Q """%16409%\Nero StartSmart.lnk"""
HKLM,"%RunOnceEx%\ZZcleanup",4,,"%11%\cmd.exe /c del /Q """%16409%\Adobe Reader 6.0.lnk"""
HKLM,"%RunOnceEx%\ZZcleanup",5,,"%11%\cmd.exe /c del /Q """%16407%\PrintMe Internet Printing"""
HKLM,"%RunOnceEx%\ZZcleanup",6,,"%11%\cmd.exe /c rd /S /Q """%16407%\PrintMe Internet Printing"""

[Server2003]
AddReg = Run2003

[Run2003]
;http://support.microsoft.com/?kbid=232509
HKLM,"%RunOnceEx%\",Title,0,"Installing Applications"
HKLM,"%RunOnceEx%\",Flags,0x00010001,20
HKLM,"%RunOnceEx%\install01",,,"Adobe Acrobat 6"
HKLM,"%RunOnceEx%\install01",1,,"%10%\Apps\Adobe6\AdbeRdr60_enu_full.exe -p"""-s /v\"""/qn\"""
HKLM,"%RunOnceEx%\install03",,,"Directx 9"
HKLM,"%RunOnceEx%\install03",1,,"%10%\Apps\DX9\dxsetup.exe /OPK"
HKLM,"%RunOnceEx%\install07",,,"Raxco PerfectDisk"
HKLM,"%RunOnceEx%\install07",1,,"%11%\msiexec.exe /i %10%\Apps\Raxco\Perfectdisk.msi /q"
HKLM,"%RunOnceEx%\install08",,,"Winrar 3.20"
HKLM,"%RunOnceEx%\install08",1,,"%10%\Apps\Winrar\silent /s"
HKLM,"%RunOnceEx%\install09",,,"Configuring Server 2003"
HKLM,"%RunOnceEx%\install09",1,,"%11%\rundll32 setupapi,InstallHinfSection Post 128 %17%\runonceex.inf"
HKLM,"%RunOnceEx%\ZZcleanup",,,"Cleaning up"
HKLM,"%RunOnceEx%\ZZcleanup",1,,"%10%\Apps\cleanup.bat"
HKLM,"%RunOnceEx%\ZZcleanup",2,,"%11%\cmd.exe /c rd /S /Q %10%\Apps"
HKLM,"%RunOnceEx%\ZZcleanup",3,,"%11%\cmd.exe /c del /Q """%16409%\Adobe Reader 6.0.lnk"""
HKLM,"%RunOnceEx%\ZZcleanup",5,,"%11%\cmd.exe /c del /Q """%16407%\PrintMe Internet Printing"""
HKLM,"%RunOnceEx%\ZZcleanup",6,,"%11%\cmd.exe /c rd /S /Q """%16407%\PrintMe Internet Printing"""

[Post]
AddReg=13min

[13min]
;Enable themes support
HKLM,"System\CurrentControlSet\Services\Themes","Start",0x00010001,2 ;automatic
;Disable that stupid shutdown event tracker
HKLM,"Software\Policies\Microsoft\Windows NT\Reliability","ShutdownReasonOn",0x00010001,"0"
;Disable Ctrl + Alt + Del to logon
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DisableCAD",0x00010001,"1"
;Change screen saver timeout to 50 mins.
HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"3000"
;Disable that stupid configure server wizard
HKCU,"Software\Microsoft\Windows NT\CurrentVersion\Setup\Welcome","srvwiz",0x00010003,"0"


[Strings]

RunOnceEx = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx"

This inf I use for both XP and Server 2003.  The advantage to having everything in 1 .inf is having everything in one place.  It also saves space on the CD.

The first thing to note is the order items are listed.  RunOnceEx will run commands in alphabetical order.  So it will run Install01 before Install02.  It uses the old sorting method so I recommand using 01 instead of 1.  The reason is because it will run Install10 before Install2.

Another thing to note is that I used the same command names in each section.  This way if I want to copy a section from XP to Server2003, I don't have conflicting names.

If you want to run an inf refer to install09.  That command runs the [13min] section of this inf.  The reason I did this is because some settings are reset at the end of setup.

At the very end I have ZZcleanup.  The reason I called it ZZcleanup is so it's always run last.  I want it to run last so I don't run into problems such as programs still into memory.  In this example, I use ZZcleanup to run a batch file, delete %windir%\Apps, and delete start menu items.

One problem you'll run into with RunOnceEx is that it's picky with variables.  Using an inf makes life easier because you can specify any folder using a DirId.  Below is a list of DirId's taken from my install.inf.

Dir Id's (thanks to gtaylor for the list)

; A DIRID can be one of the following values: -01,
;
; Value Destination Directory
;
; 01 SourceDrive:\pathname (the directory from which the INF file was installed)
; 10 Windows directory
; This is equivalent to %windir%.
; 11 System directory
; This is equivalent to %windir%\system32 for NT-based systems,
; and to %windir%\system for Windows 9x/Me.
; 12 Drivers directory
; This is equivalent to %windir%\system32\drivers for NT-based platforms,
; and to %windir%\system\IoSubsys on Windows 9x/Me platforms.
; 17 INF file directory
; 18 Help directory
; 20 Fonts directory
; 21 Viewers directory
; 23 Color directory (ICM) (not used for installing printer drivers)
; 24 Root directory of the system disk.
; This is the root directory of the disk on which Windows files are installed.
; For example, if dirid 10 is "C:\winnt", then dirid 24 is "C:\".
; 25 Shared directory
; 30 Root directory of the boot disk, also known as "ARC system partition,"
; for NT-based systems. (This might or might not be the same directory as
; the one represented by dirid 24.)
; 50 System directory for NT-based operating systems
; This is equivalent to %windir%\system (NT-based systems only).
;
; 51 Spool directory (not used for installing printer drivers see Printer Dirids)
; 52 Spool drivers directory (not used for installing printer drivers)
; 53 User profile directory
; 54 Directory where ntldr.exe and osloader.exe are located (NT-based systems only)
; 55 Print processors directory (not used for installing printer drivers)
; -1 Absolute path
;
;
; Value Shell Special Folder
;
; 16384 %userprofile%\Desktop
; 16386 %userprofile%\Start Menu\Programs
; 16389 %userprofile%\My Documents
; 16390 %userprofile%\Favorites
; 16391 %userprofile%\Start Menu\Programs\Startup
; 16392 %userprofile%\Recent
; 16393 %userprofile%\SendTo
; 16395 %userprofile%\Start Menu
; 16397 %userprofile%\My Documents\My Music
; 16398 %userprofile%\My Documents\My Videos
; 16400 %userprofile%\Desktop
; 16403 %userprofile%\NetHood
; 16404 C:\WINDOWS\Fonts
; 16405 %userprofile%\Templates
; 16406 %allusersprofile%\Start Menu
; 16407 %allusersprofile%\Start Menu\Programs
; 16408 %allusersprofile%\Start Menu\Programs\Startup
; 16409 %allusersprofile%\Desktop
; 16410 %userprofile%\Application Data
; 16411 %userprofile%\PrintHood
; 16412 %userprofile%\Local Settings\Application Data
; 16415 %allusersprofile%\Favorites
; 16416 %userprofile%\Local Settings\Temporary Internet Files
; 16417 %userprofile%\Cookies
; 16418 %userprofile%\Local Settings\History
; 16419 %allusersprofile%\Application Data
; 16420 System Root (C:\WINDOWS)
; 16421 C:\WINDOWS\System32
; 16422 Program Files
; 16423 %userprofile%\My Documents\My Pictures
; 16424 %userprofile%
; 16425 C:\WINDOWS\System32
; 16427 C:\Program Files\Common Files
; 16429 %allusersprofile%\Templates
; 16430 %allusersprofile%\Documents
; 16431 %allusersprofile%\Start Menu\Programs\Administrative Tools
; 16432 %userprofile%\Start Menu\Programs\Administrative Tools
; 16437 %allusersprofile%\Documents\My Music
; 16438 %allusersprofile%\Documents\My Pictures
; 16439 %allusersprofile%\Documents\My Videos
; 16440 C:\WINDOWS\resources
; 16441 C:\WINDOWS\resources\0409
; 16443 %userprofile%\Local Settings\Application Data\Microsoft\CD Burning

 

How to integrate RunOnceEx settings

There are many ways to including RunOnceEx settings in your install.  To keep things simple, I am only going to list my way.  For other methods refer to Aaron's guide listed above, or search the forums for runonceex.

First, create a file called runonceex.inf and put your runonceex settings in it.  Then put it into your i386 folder.  Edit txtsetup.sif and put this:

runonceex.inf = 1,,,,,,,20,0,0

That way runonceex.inf will be copied to the %windir%\inf folder.  Also add what's in bold below to txtsetup.sif:

[HiveInfs.Fresh]
AddReg = hivedef.inf,AddReg
AddReg = hivesys.inf,AddReg
AddReg = hivesft.inf,AddReg
AddReg = hivecls.inf,AddReg
AddReg = hiveusd.inf,AddReg
AddReg = hivesxs.inf,AddReg
AddReg = dmreg.inf,DM.AddReg
AddReg = new.inf,newhive

Create new.inf and put it in your i386 folder.  In txtsetup.sif add this line:

new.inf = 1,,,,,,_x,,3,3

Also in dosnet.inf add these lines:

d1,runonceex.inf
d1,new.inf

In new.inf put this if you're installing Server 2003:

[Version]
Signature=$CHICAGO$

[newhive]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",,0x00000012
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",Title,0x00000000,"Applying custom settings"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",Flags,0x00010001,0x00000020
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Infs",,,"Applying Inf's"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Infs",1,,"rundll32 setupapi,InstallHinfSection Server2003 128 ..\Windows\Inf\runonceex.inf"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Infs",2,,"rundll32 setupapi,InstallHinfSection DefaultInstall 128 ..\Windows\Inf\Install.inf"

Or if you're installing XP put this in new.inf:

[Version]
Signature=$CHICAGO$

[newhive]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",,0x00000012
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",Title,0x00000000,"Applying custom settings"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",Flags,0x00010001,0x00000020
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Infs",,,"Applying Inf's"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Infs",1,,"rundll32 setupapi,InstallHinfSection XP 128 ..\Windows\Inf\runonceex.inf"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Infs",2,,"rundll32 setupapi,InstallHinfSection DefaultInstall 128 ..\Windows\Inf\Install.inf"

In both examples I included another inf - install.inf.  This is just an example, you don't have to add this line.  You can safely delete it if you want.  To make it easier to understand I put the only thing changed in Bold.

What will happen is at the end of text mode setup (the blue screen with the yellow bar), new.inf will be added to the registry.  RunOnceEx is only run at the 13 min mark by outlook express (msoe50.inf).  So at the 13 min mark of setup (xp or server 2003), runonceex.inf will be run.  When it's run, it'll add more registry keys to runonceex.  When setup is done and the first logon happens, runonceex will be run again, this is where the applications and such will be installed.  I prefer installing programs at logon rather than the 13 min mark to avoid problems.

 

Running programs at the 13 min mark

In my above example, I chose to run install.inf at the 13 min mark, and install the apps at first logon.  If you want everything to run at the 13 min mark, replace install.inf with your inf that has your settings.  Or you could put your RunOnceEx settings in new.inf.  Or you could use Runonce\Setup.  Search the forums for more information on Runonce\Setup.

 

Testing RunOnceEx

Most people will test there RunOnceEx inf by restarting the computer or by running setup, but there is a far simplier way.  Add the RunOnceEx registry entries, then run this command:

rundll32.exe iernonce.dll,RunOnceExProcess

Make sure you have the applications and such in the right folders though.  For example, I put all my apps in $OEM$\$$\Apps which translates to %windir%\Apps during setup.  So before running the above command i put my apps folder in %windir%.

 

More Information

Here are some good threads on RunOnceEx.  Please use the forums first, PM me only if no one will help you.  I mainly focus on using inf files, for information on using batch files refer to the links below to good threads.

using windows update - Thread by devil270975
Windows Update Method for an Unattended CD - Good thread by DaveXP
Installing Apps Using Runonceex - This is my thread on the subject.