Sunday, July 15, 2007

.Net Framework 1.1 Installation Fails (rollback at end of installation) on Vista

I'm partly embarrassed for having to post this, because it identifies that I am guilty of a few sins:

1. Don't run Microsoft Windows Vista. Believe me, I'm not a fan. I wouldn't be doing it except to understand the operating system since I will be supporting it at my job, so please forgive me. I've installed two Ubuntu Linux boxes on the side as penance.
2. Don't run any Microsoft software before Service Pack 1, especially one that changed so much of the underlying OS and rules as Vista did.

That said, while testing software and setting up a dedicated development station, I came across the need to install the .Net Framework 1.1. This is, to date, not an uncommon need as many applications require it. This posed several problems.

Here's a few things to try if you run into this same issue. Note that each one of these instructions requires a good understanding of how your computer works. If you're a novice, call your nephew or local computer geek. Any one of these could do irreparable harm to your system including rendering it useless and losing all of your data. Back things up before proceeding and use these instructions at your own risk!!


Troubleshooting Metodologies: Try each step, re-run the installation. If it works, run the SP1 Upgrade. If that works, do a Windows update and get the latest security patches.
Be patient and do one at a time, if it fails, proceed to the next, each step is a little more risky than the previous.
  1. Especially if you are running Kaspersky Anti-virus or Zone Labs Internet Security Suite, It's time to turn off your virus protection (don't uninstall unless you have to, typically you just have to right click the icon and choose "Disable" or "Shut down ZoneAlarm Security Suite"). Most people skip this idea because anti-virus in XP rarely interferes to the extent that it does in Vista (and every setup program warns you to turn off Anti-virus, even though it is rarely necessary).
    For the .Net Framework 1.1 setup, Kaspersky and Zone Alarm will always interfere. The Framework installation tries to run regtlb.exe to register a number of libraries at the end of installation. Due to an untimely lock on the registry, regtlb will fail (though you won't see any indication that this happened unless you've enabled very aggressive logging and debugging in Windows Installer).
  2. Temporarily disable User Account Control (UAC). The easiest way I've found to do this is:
    (1) Click Start.
    (2) Type "msconfig" in the blank spot above and hit Enter.
    (3) Click "Tools", and scroll down the list.
    (4) Click "Disable UAC" and click "Launch". A command prompt window will appear and indicate, hopefully, that The Command Completed Successfully.
    (5) Reboot.
    Note that this will leave your computer unprotected by UAC, which I am a big fan of (Most Linux distributions use similar technologies. I'm glad that Microsoft stole this idea).
    After you've run the installation, repeat steps 1-5 except choose "Enable UAC".
  3. Disable nx (No Execute) and DEP (Data Execution Prevention) if you're utilizing a modern processor (and if you're not, and you're trying to run Vista, downgrade the entire system to XP, you'll thank me later). Note that DEP is also here to protect you, but often gets in the way. .Net Framework 1.1 came out before DEP, so there are some isolated issues centered around the registration of System.EnterpriseServices.dll. If you're "rolling back" at that point, this is probably your solution.
    (1) Perform the above steps for disabling UAC, it can only help you here.
    (2) Click "Start", type "cmd" and hit Enter.
    (3) Type: bcdedit.exe /set {current} nx AlwaysOff
    (4) Reboot.
    Rerun the installation. If it works, absolutely don't forget to install the service pack for .Net 1.1, it includes fixes for this problem.
    If you want to turn NX back on, repeat step 1-4, but for step (3), type: bcdedit.exe /set {current} nx OptIn
  4. Clean up a failed Framework Installation. Follow the steps linked here. (Please note that he refers to this as a Last Resort, which it is. It is highly invasive)
  5. Are you using an account other than Administrator to do this installation? Try enabling the Administrator account (Be sure to assign it a password!), login as Administrator. If you have re-enabled DEP and UAC, disable them again. Try the installation.
    The reason this may work is that the Administrator account will likely launch fewer user applications at start-up. When in doubt, make sure everything is as thin as possible and reinstall.
Things to avoid (I tried them, and they caused me grief)
  1. Manual installation. There's a few tricks outlined whereby you disable rollback in the middle of the .Net Framework 1.1 installation and then attempt to install the remaining components by hand. Don't do this. It may appear as though it worked but your .Net Framework apps will be unstable and some apps will still think the Framework is not installed.
  2. Renaming (or deleting) of the mscoree.dll in c:\Windows\System32. Doing so requires you to take ownership of the file, change the permissions on the file to values that are not safe, and ... of course ... rename the file. You'll find on Vista that the installation will run even shorter and that several components (including Event Viewer) will simply not work. This was a tip from Windows XP and should not be used in Vista.

I'd strongly advise anyone upgrading (if you can call it that) to Vista to install the .Net Framework 1.1 manually before doing any other application installs. There are thousands of forum posts and articles on how to fix problems with Framework 1.1, which indicates that it's a little touchy to get working. Make this step (2) after completing setup and installing the Application Compatibility updates. Perhaps in my many re-loads of this development system, I'll outline my recommended baseline software install for Vista, but for now, consider this step 2.

Many applications still require it and some will even try to install it manually. If this happens, you'll receive an install error for the application and it may not be terribly apparent that the installation error is related to .Net 1.1.

One last tip for those running Vista x64. You've got quite a road ahead of you. I'm running the 32-bit version at the moment, but upon my reading I ran into many articles identifying .Net 1.1 will not install without the Service Pack will not work in Vista x64. You'll be stuck in a catch-22. Vista 64 requires Service Pack 1, but the installer requires the non-Service Pack version be present.
Perhaps an application compatibility update will resolve this soon, but if not, there seems to be one sure-fire way to make it work:
If you're skilled with Windows Installer, give this solution a shot. It will allow you to install both the framework and SP1 in one shot. (The missing last step is to run "netfx.msi" from whatever folder you chose to build the administrative install point from).
Of course, it's not officially supported by Microsoft, so you're treading in tall weeds here.

Much thanks to Aaron Stebner's WebLog and the three thousand forum posts I read that led me to my final answer in this problem.
I'll get around to replying to each one when I have a few days :-)