Run registry entries

Just some notes on using the Run and RunOnce registry entries in Windows

If you want to add a registry entry to run a .cmd, .bat or .exe file from a Run or RunOnce entry

e.g.

HKML\Software\Microsoft\Windows\CurrentVersion\Run  or HKCU\Software\Microsoft\Windows\CurrentVersion\Run

you can use a full path such as  C:\Windows\Fred.cmd

However, it is good practice to use a system variable because the Windows folder may not always be C:\Windows. It may be C:\Windows.1 if the user has installed more than one copy or D:\Windows if the user is booting from a different disk.

In this case we can use a variable like %windir%\Fred.cmd instead.

However, the registry type must be REG_EXPAND_SZ = 2.  This ensure that any variables are expanded before execution (probably would have been too obvious if MS had called it REG_EXPAND_VARS !!!

If using an INF file, we need to use 0x00020000 - e.g.

HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","GrubDiskClean",0,"C:\WINDOWS\OEMDir\FiraDisk.cmd"

becomes

HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","GrubDiskClean",0x00020000,"%windir%\OEMDir\FiraDisk.cmd"

Note: The INF files that are copied to %windir%\oemdir will not run if OemPreinstall=No is used in winnt.sif. This means registry entry and some other non-driver lines won't run in GUI mode. The INF files can be forced to re-run if you add an [OemInfFile] section and specify %SystemRoot%\xxx.inf (look in the folder to see what name the inf files end up as).

See here for more INF keys