Update Rollup 2 setup can fail because it does not detect the .NET Framework 1.1 SP1
It has been a while since I've written about any setup issues related to Update Rollup 2 for Media Center 2005. The lack of posts has been caused by several things:
- Most (if not all) systems that ship with XP Media Center pre-installed now also include Update Rollup 2, so there isn't a need for most people to download and install it directly
- Many people have started using Windows Vista Media Center
- The issues I've run into that have prevented Update Rollup 2 installation from succeeding have all been similar to ones that I've documented in my Update Rollup 2 troubleshooting guide
This week, I ran into an Update Rollup 2 installation issue that is related to the .NET Framework 1.1 that I hadn't seen before, so I wanted to describe it here in case anyone else sees it. Also, since the underlying problem is in the .NET Framework 1.1, it could potentially affect other programs, and not just Update Rollup 2.
Diagnosing the issue
In the case I saw this week, a customer ran Update Rollup 2 setup and it installed all of the prerequisite Windows hotfixes, but then failed when trying to install the main Update Rollup 2 package (KB900325). I looked at the log file named %windir%\kb900325.log from this system and I saw the following:
0.187: Exec PreReq.SingleOp.OneDotOneSP1Framework: Types don't match of Key SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322
Update Rollup 2 setup requires that you have the .NET Framework 1.1 and 1.1 SP1 installed, so I first verified using Windows Installer tools that 1.1 and 1.1 SP1 were correctly installed. However, as seen in this log file, the Update Rollup 2 setup itself was not able to detect 1.1 SP1 because of a problem with the data type for a registry value.
How to workaround this issue
To resolve this issue, I had the customer fix the incorrect registry value that was causing KB900325 setup to think that 1.1 SP1 was not installed. The fix required the following steps:
- Click on the Start menu, choose Run, type cmd and click OK
- Type this command: reg delete "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" /v SP /f
- Type this command: reg add "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" /v SP /t REG_DWORD /d 1 /f
- Re-run Update Rollup 2 setup
Root cause of the issue
The interesting thing about this issue is that the wrapper setup.exe (which chains the prerequisites together with Update Rollup 2) and the KB900325 package both perform a check for both 1.1 and 1.1 SP1. In this scenario, the wrapper was able to correctly detect that 1.1 SP1 is installed. However, the logic inside of the KB900325 setup package was not able to detect 1.1 SP1.
Both the wrapper setup and the KB900325 setup use the following registry value to detect the presence of the .NET Framework 1.1 SP1 (as I've previously described and written sample code for in this post):
[HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322]
The one difference is that the KB900325 setup requires this value to be a REG_DWORD, while the wrapper setup will work if the value is a REG_DWORD or a REG_SZ.
Technically, the .NET Framework setup only writes this value as a REG_DWORD, so that should be the only form that this value should be in on a system. However, I have seen a few cases where this value was somehow deleted and re-created as a REG_SZ value by some other application. The difference in registry data type can affect detection depending on how the registry value is being retrieved and parsed.
If you end up seeing any cases where an application tells you that you do not have the .NET Framework 1.1 SP1 installed but you really do, I suggest checking to see what data type this SP value is stored as in your registry and if it is not currently a REG_DWORD, use the steps listed above to change it it to a REG_DWORD value.