Find the Real Error Code for “return value 3”
Unless you specialize in creating Windows Installer packages, you know it can be a daunting task even with the template tools available like VS Deployment Project and Wix. In fact, I’d be willing to bet a high percentage of developers cringe at the sound of MSI. I can remember creating a custom MSI installer using Wise Installer ( discontinued ) for MTS and COM+ and having to write a custom task to search and clean up residue from the registry. Ugh! What a nightmare! I was reminded of this very notion trying to parse, interpret and analyze a Windows Installer verbose log file today. I was quickly wishing for a tool to help me analyze the large installation log file. I remember the joy when I found and used LogParser for querying IIS and other logs using SQL like queries .. my brain urge me too Google for a Windows Installer log parser tool .. to my delight I found a gem, part of Windows Installer Development Tools, Windows Installer Verbose Log Analyzer Wilogutl.exe.
What is Wilogutl.exe?
Wilogutl.exe assists the analysis of log files from a Windows Installer installation, and it displays suggested solutions to errors that are found in a log file.
Non-critical errors are not displayed. Wilogutl.exe can be run in quiet mode or with a user interface (UI). The tool generates reports as text files in both the UI and quiet modes. It works best with verbose Windows Installer log files, but also works with non-verbose logs
MSI verbose logging options:
How to install with verbose logging?
- msiexec /i MyCustom.Install.msi /lv ./install.log
How to uninstall with verbose logging?
- msiexec /x MyCustom.Install.msi /lv ./uninstall.log
Windows Install Debugging Steps
When I encounter a failed setup with return code 1603, here are the steps that I follow:
1. Re-run the setup with verbose logging enabled using steps similar to those that I listed here (if there is not already a verbose log file available). Those steps will generate a verbose log file named msi*.log in the %temp% directory the next time the setup package is executed.
Important note - some MSI-based setups, including the .NET Framework 2.0, 3.0, 3.5 and higher and Visual Studio, will not create log files named %temp%\msi*.log even if using the instructions listed below. Please see this blog post for more details about why that is the case and also for a list of some products that I know of that use different log file creation logic and the locations of the log files that they create.
2. Open the verbose log in a text editor such as notepad and search for the string "return value 3". In nearly all cases, this takes me to the section in the verbose log that lists the action that failed that initially caused setup to rollback.
3. Review the contents of the log file immediately above the "return value 3" string to determine which custom action or standard action failed.
4. Depending on which action is failing, I will proceed to more detailed debugging from here.
Wilogutl Screen Shots
References:
- Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
- How to locate the cause of error code 1603 in a verbose MSI log
- MSI Error Codes.aspx)
- Read a Deployment Tool MSI Log – this applies to a plain old MSI log file