Using RunOnceEx
Using RunOnceEx
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.
PreReading
AaronXP has written a good guide on RunOnceEx here. This guide will focus on using .inf files. Syntax for the RunOnceEx Registry Key
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 NTbased 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
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,"Ap plying custom settings" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",Flags,0x00010001,0x0 0000020 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,"Ap plying custom settings" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",Flags,0x00010001,0x0 0000020 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.
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.
v