I’ve found that many times when debugging an MSI install, it’s quite handy to get a full verbose log of what the install is doing.
You can turn on verbose logging from within the installation itself, at least when using InstallShield, but that has several drawbacks.
- It’s implemented as a function of the InstallShield SETUP.EXE front end, so if a user dbl clicks the MSI file directly, it won’t log
- It doesn’t apply during the UNINSTALL or the REPAIR operations, which are quite common and can also fail and require logging
To get a full MSI activity log, regardless of the activity, you need to modify a registry key:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
Logging=Voicewarmup
To turn it back off, just delete or blank the Logging value.
The logs will end up as random .LOG filenames in the user’s TEMP folder. It’s best to clean out your temp folder before running the install so the new LOG files will be easy to find. (or sort by date).
But doing all this manually can be a pain.
So here’s a little BAT file to take the edge off.
Just save it as MSILogging.bat (somewhere on your path for maximum utility), and then run it like so
MSILogging ON
MSILogging OFF
or just
MSILogging (no parm is the same as ON).
echo off REM Simple batch to turn verbose MSI Logging on or off REM command line option is ON or OFF (all lower or all UPPER case) REM Create the reg file set file=%temp%\$reg.reg echo Windows Registry Editor Version 5.00>%file% echo ;>>%file% echo [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]>>%file% if .%1.==.ON. echo "Logging"="voicewarmup">>%file% if .%1.==.on. echo "Logging"="voicewarmup">>%file% if .%1.==.. echo "Logging"="voicewarmup">>%file% if .%1.==.OFF. echo "Logging"="">>%file% if .%1.==.off. echo "Logging"="">>%file% REM for testing purposes REM type %file% REM Apply it with Regedit (you'll need to have rights) REM /s makes it silent regedit /s %file% REM Could uncomment this to remove the temp file when done REM del %file%
And no comments about my lame bat file case insensitive batch scripting<g>
Even better, add a line at the end:
copy %temp%\msi*.log .\
and all those log files will end up in your current directory (instead of making you go fishing through Documents and Settings to find them), although this may suit some people more than others.