“Could not load file or assembly ‘MOM.Implementation’ or one of its dependencies. The system cannot find the file specified.”
Recently I experienced this error message while booting up my niece’s computer. I knew that I was responsible for it because I had been working on video issues, which is why I had it in the first place. One of the steps I took was to update to the latest ATI video drivers for her Gigabyte 9200 128MB AGP8x card I had installed in the machine originally. An attempt to flash the card’s BIOS caused the card to crash, which actually wasn’t all that unexpected, but still sucked, which forced me to uninstall the drivers in order to replace the defective card with an ATI 9600 128MB AGP8x card that I had used in one of my systems before I moved on to PCI-E16x. Even though it’s not always necessary to uninstall legacy drivers, primarily because they are usually unified to identify and work for a variety of older hardware, it’s usually safer. I say usually because in this case it had the opposite effect because reinstalling an older version of the driver files resulted in the error message… Or, at least that’s what I thought at first.
I wasted about five hours searching the Internet hoping to find both the cause and a cure to the error message. I learned that the error message most often occurs when uninstalling the most recent drivers in preference for an older version. The most recommended course of action, based upon user input in forums, was to uninstall the drivers, reinstall the drivers, reinstall the .NET Framework 2.0, yadda-yadda-yadda. Some users reported that simply unchecking CLI under the Startup tab using MSConfig resolved the problem of the error message appearing after boot, but obviously failed to solve the problem. The only consensus was that the problem concerned the ATI Control Panel, which I already knew because of the term, “MOM,” used in the error message. Since there was no identified cause or fix, I decided to tackle the problem on my own, simply because I didn’t want phone calls from my sister about the error message.
So, what is the cause? The cause is the installer; specifically the uninstallation process when going back from the most recent drivers to a previous version. To be even more specific, the installer more often than not fails to correctly update the Windows XP System Registry, and possibly some files found in Program FilesATI TechnologiesATI.ACE, or something like that. I’ve no intention of spending more time reproducing the problem in order to be even more specific, especially since the error message is due to specific registry values, more often than not.
What Registry values? Again, not wasting more time on this problem. So, even though I’m going to generalize, anyone with experience editing the System Registry should be able to easily identify and fix the problem. As to the problem itself… The ATI Control Panel is initialized to run at user logon, not boot, however, the value is stored under Local Machine in the System Registry. The latest legacy drivers use a different value name (key/DWORD/whatever), as well as adds an argument/parameter after the file location of the file to be executed. The previous control panel/unified drivers with control panel, all use a different name with file location, but no parameter. Since there is a dramatic change in both name and value from the latest legacy driver to all its predecessors, the installer fails to remove or modify the Registry correctly.
What does this mean? In simple terms, Windows is forced to attempt a second initialization of the Catalyst Control Panel, and thus the generation of the error message. I haven’t tested it, and don’t plan on it, but I don’t believe that the control panel can run more than one instance of itself. I don’t believe that .NET can tell the difference when an application cannot run more than once, or when a file, assembly, or dependency is actually missing. Thus, too many people are misinterpreting the error message as a failed installation.
But, why doesn’t the Catalyst Control Panel run? Simply put, if the wrong value attempts to run the control panel first, it might hang. It depends upon which driver is installed, how many instances might be trying to run simultaneously, and the .NET Framework. After a few hours playing around, I’ve seen the Control Panel run successfully when clicked on manually, or not initialize manually, depending upon which driver was installed. It depends upon a number of variables, which I haven’t fully identified.
How do I fix it? Type in Regedit in the Run input box under Start for Windows XP/2000, and Vista, if I remember correctly. Expand HKey Local Machine, and scroll down to Software. Expand Software, scroll down to Microsoft, expand Microsoft, scroll down to Current Version, expand Current Version, scroll down to Run, and then click on and highlight Run. In the right-hand pane, you should see not one but two values using two different names to initialize ATI’s Catalyst Control Panel. One might be “ATICCC” (I can’t remember off the top of my head), and the other should be “StartCCC". Notice the different names, and the primary reason for the error messages. The latest legacy driver package uses “startCCC” and includes the argument/parameter, ‘"C:Program FilesATI TechnologiesATI.ACECLI.exe” /MSRun something-something-something"‘. The older drivers use, “C:Program FilesATI TechnologiesATI.ACEcli.exe” runtime -Delay’. If you’ve reinstalled the older driver, delete StartCCC. If you’ve installed the latest legacy, delete ATICCC. If you delete the wrong one, or both, simply go into Add/Remove Programs, and choose Change for the Catalyst Control Panel, and then Repair to restore the correct Registry value. Close out of everything, re-boot your machine, and you should find the Catalyst Control Panel running normally after logging into Windows.
What if the Catalyst Control Panel still doesn’t work, or the error message still appears? Everything should be back to normal, but I have seen where uninstalling ALL ATI software still left files and folders under Documents and Settings, Program Files, and under Run under Local Machine in the System Registry. So, if you suffered from a corrupted file, installation, uninstallation, or just want to play it safe, uninstall all ATI software, and reboot when prompted. When Windows is running again, delete the ATI Technologies folder under Program Files, or its equivalent for x64 machines (Program Files x86????), if necessary. Under Documents and Settings, under All Users, Default User, and every user presently initialized, i.e. My User, find the ATI folders and delete them under Application Data, and Local SettingsApplication Data. You’ll need to uncheck Hidden files under Folder Options in order to see the Local Settings folder, and users who have never logged in after having any ATI software installed might not have ATI folders. When all the folders are deleted, go back to HKey Local Machine Microsoft Windows Current Version Run, and delete any and all ATICCC and StartCCC entries, along with any other ATI specific entries you might come across, perhaps AVIVO or HDAudio(?). Reboot your machine, and then install the drivers, control panel, and ATI software that you are certain you want to use now. Unless the installer fails to overwrite a corrupted driver file in your System32, or x64 equivalent, everything should function correctly. Since my experience with the installer suggests that it does not perform a md5, or simplified checksum comparison during installation, it might not overwrite a corrupted file successfully. However, since this is strictly about the Catalyst Control Panel, deleting the Program FilesATI Technologies folder and its contents should ensure a successful installation.
Afterthought… I honestly don’t understand how reinstalling the .NET Framework 2.0 will resolve this issue, as suggested by others, unless the Framework was broken. If anything, the use of System Restore provides an older backup of the System Registry, where there is only the ATICCC under Run, and they are simply performing an unnecessary extra step. System Restore doesn’t always fix System Registry issues, and I’m not sure if that’s due to it not always backing up the registry, or if reinstalling drivers too many times forces it to purge older backups to preserve drive space. However, I don’t completely trust System Restore, and I wanted to find the actual cause, so I’ll never know for certain.