New redists break all dynamically linked MFC 2005/2008 apps on Windows 2000

EDIT – June 18th, 2011 – the below blog entry is out of date – click here for up to date information.

Step by step instructions for Windows 2000 end users that want to get up and running quickly after having installed one or both of the invalid Visual C++ security redistributables on Windows 2000:

1) go to Control Panel – Add/Remove Programs, and uninstall the following (one or both may be installed)
a) Microsoft Visual C++ 2005 Redistributable – KB2467175
b) Microsoft Visual C++ 2008 Redistributable – KB2467174 – x86 9.0.30729.5570

Important: look for entries in the add/remove programs with the exact titles above, i.e including those KB article numbers in the title of the entry, as there may be similar looking ones in there (ignore those ones)

2) Find your “Windows” folder. Usually this is at c:\windows or c:\winnt . For the purposes of these instructions, I’ll assume it’s c:\windows (replace that below with your actual Windows folder)

3) Create a folder on your desktop named WORKDIR. You’ll use this later to hold all the DLLs you’ll be copying to your system32 folder.

4) Using Windows Explorer, go to c:\windows\winsxs. Hit the search button. For “Search for files or folders named”, type in 4053, and then hit ENTER. If nothing has been found type in 762 and hit ENTER.

5) There should be 5 folders that were found (as well as various other files that should be ignored, also, ignore any folders with amd64 at the beginning of their folder names). Note there may be some debug folders in here as well, brining the folder count up to 8.

Example of folder name: x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_b77cec8e

6) For each of these 5 folders (or 8 if you have Debug some debug folders), do the following:
a) double click on the folder.
b) Edit – Select all (or CTRL+A)
c) Edit-Copy (or CTRL+C)
d) click on your desktop and open the WORKDIR folder you created above, and then hit Paste (or CTRL+V).
e) return to the Windows Explorer search window and click the “Back” button.

7) Repeat step (4) except search for 4148. If nothing found, search for 21022, then repeat steps 5 and 6.

8) Now your WORKDIR folder should be full of all the DLLs you will require to have copied to your C:\Windows\System32 folder. Open the WORKDIR folder on your desktop, and select all (CTRL+A) and then Edit-Copy (CTRL+C). Then navigate to your Windows\System32 folder and Paste (CTRL+V). If you receive any errors pasting (files in use) you may have to reboot and/or exclude the MSVCR* files when copying and pasting. At a minimum, you’ll need to copy at least the MFC related DLL files (files with MFC in their names)

9) Try running the problematic applications again, to make sure the problem has been fixed.

More background info:

Thanks to Martin Richter on letting me know about this one – the new VCRedists that were rolled out yesterday due to the multi-version security update breaks all dynamically linked MFC 8.0 and 9.0 (VC2005/VC2008) apps that have ever shipped and are deployed to Windows 2000. Any app that doesn’t have a local copy of MFC in their program folder is affected (due to DLL Hell in system32)

If you install them (do this on a test machine not a production machine!), run dependency walker on the updated mfc80.dll and mfc90.dll versions on Windows 2000 and see a new function being called that is not available under XP:

FindActCtxSectionStringA (or FindActCtxSectionStringW with the Unicode version)

These are the links to the broken redistributables:

VC2005

VC2008

A simple workaround under Windows 2000 is to copy the older versions of MFC80.DLL and MFC90.DLL (or their corresponding Unicode versions) to your program folder(s). Then your app will use those instead (remember Windows 2000 was a pre-SxS world).

To find these old DLLs is tricky – what would have been nice is that something like this would work:
(1) Uninstall redist update
(2) copy older versions from system32 to your program folder

but unfortunately, uninstalling it just leaves the new (broken ones) in system32. No way to retrieve the old ones. Or is there?????

Yes it turns out: Luckily (and luckily I remembered this from years ago), Windows 2000 still installs the DLLs to WinSxS. So the old ones are still there. So the workaround is to copy from the WinSxS folder the older version of MFC8 or 9 back to system32 or your program folder. But of course, this solution not benefitting from the security updates that are so important. So the best workaround is wait for a new version to be issued by Microsoft.

Special note for those that statically link their MFC apps: you will only be affected if you update your tools (i.e. KB2465367 for VS2005, or KB2465361 for VS2008, VS2003 may be affected as well but I don’t have time to check it – see KB2465373) and then recompile your application. Then your app will no longer run on Windows 2000. So beware of installing these tools updates if you plan on rebuilding your app and releasing it and expect it to work on Windows 2000.

About tedwvc
On this blog you'll find some tips and tricks for dealing with Visual C++ issues.

24 Responses to New redists break all dynamically linked MFC 2005/2008 apps on Windows 2000

  1. Steven says:

    Life saver!
    That update broke my old IMail system.
    Time to upgrade/replace imail I guess.

  2. Glenn says:

    Thank you very much Ted!

    This update broke my Arcserve installation on two backup servers at remote offices and your solution got them back up and running again.

    Thanks again.

  3. This is what I did and worked just fine for me on my Windows 2000 Professional SP4:
    1. Searched in HDD for MFC80*.DLL and MFC90*.DLL.
    2. Found 11 files for MFC80*.DLL dated 2006, and found 13 files for MFC90*.DLL dated 2009.
    3. Replaced the ones in c:/winnt/system32, all dated 2011 with those found, and it worked.
    Note: MFC80.DLL and MFCENU.DLL were denied copy since the system saw them as being used. I didn’t copy these, and still worked. Several other issues were solved with this move. Haven’t found any inconveniences after performing this task.
    Good luck!,
    Tito

    • Albert M Bartlett says:

      
      Tito:
      This is what I did and worked just fine for me on my Windows 2000 Professional SP4:
      1. Searched in HDD for MFC80*.DLL and MFC90*.DLL.
      2. Found 11 files for MFC80*.DLL dated 2006, and but I didn’t find any MFC90*.DLL on my
      system. Should I have found MFC90*.DLL on my system?
      3. Replaced the ones in c:/winnt/system32, all dated 2011 with those found, and it worked.
      Abe….

      • tedwvc says:

        it could be either or both (so if you haven’t found any MFC90*.dll don’t worry about it)

  4. Canon_Man says:

    Tito,

    Thanks a bunch for posting this fix.

    Up and running in about 5 minutes because of your efforts.

    Grrrr, MS again!

  5. Andrew Rossmann says:

    I doubt if MS will fix this. Win2K is not supported, so they don’t care.

    • Andrew Rossmann says:

      Should have added that if MS doesn’t want to fix it, they should at least put in some version checking to prevent the patch from being installed on Win2K.

  6. Sun says:

    You are the man! One of these days I will upgrade, but I’m mostly happy with Windows 2000 and some apps still need to run on this ancient machine! :)

  7. Jay Vincent says:

    Tito:
    Many thanks – your fix took a couple of minutes and I was back up and running my antivirus software (avg9). I had been waiting (not patiently) since last week for someone to publish a fix after my unguided efforts failed. I only had to replace MFC80.dll and MFC80u.dll to fix my w2k system.

  8. Daniel Wyse says:

    Thank you very much, Ted. Your instructions are easy to follow and they fixed my problem in short order.

  9. Paul Thorpe says:

    Thanks Tito,
    I also only found the MCF80s needed replacing … the MCF90s were still 2009 versions. Now my Panasonic movie software for my HD camcorder is working again!!
    Cheers
    Paul

  10. Peter McCallum says:

    Add my own thanks. Five minutes – after two days of scratching around the Internet – and AVG and HP Scanner are now working on my W2K SP4 Professional. Must have used this old Compaq for over 10 years with few if any problems. One day I will lash out and buy an Apple or an iPad.

    Again, thanks.
    plm

  11. Luís Augusto Panadés says:

    Worked for me.
    Just copied the oldest files MFC80*.dll and MFC90*.dll in the system32 diretory and problem was solved.

    Thanks.

  12. Andrew Rossmann says:

    MS updated the release to no longer offer the unsupported patch for Win2K, at least with Windows Update. I don’t know if you downloaded it and try to run it if it would still run or not.

    • tedwvc says:

      No, unfortunately all they did was change the OS offering parameters. The EXEs are not rebuilt and are still the broken ones.

  13. Stretchr says:

    Worked perfectly! This is the only solution that I have found that worked! Thank you!!!!!!!

  14. Ingmar says:

    Thanks so much for that article, really speeded up our troubleshooting.

    Just to confirm here, we are linking statically against the MFC and Windows 2000 users reported the same exact problem. Uninstalling KB2465361 and rebuilding our app solved the problem.

    Thanks again.

  15. Trevor says:

    It looks like Microsoft came out with KB2538242 last night, which claims to fix the issue: “The MFC security fix uses an API that is not supported on Microsoft Windows 2000. When deploying the update on Microsoft Windows 2000 systems, the installation resulted in functionality issues for some applications.” ( http://www.microsoft.com/technet/security/bulletin/MS11-025.mspx )

    Has anyone tried it yet?

  16. Paul Thorpe says:

    No chance! … anyone want to risk it?
    Paul

  17. Well done,

    Microsoft should thank you big time.

    Charles

Leave a reply to Jay Vincent Cancel reply