Our sales guys have an in-house application installed that uses a few custom COM objects/DLLs stored in System32. I've been trying to replace one of these DLLs with a newer version, which works fine after the installation, but not after a reboot.
Here's the interesting part.
- I unregister the old DLL with regsvr32 /u myDll.dll
- Regsvr32 shows a dialog indicating success.
- I copy the old DLL into a "save" folder, and rename it to 20110412-myDll.dll_.
- I delete the original from system32.
- I put the new DLL in system32.
- Register the new dll with regsvr32 myDll.dll
- Test new DLL with a VBScript - works fine.
- And the fun part
- Reboot.
- Re-run test vb script. It fails.
- Look at the DLL (which I replaced) in system32. It has been magically replaced by the old DLL. I verified this with
fc
(binary compare) with system32\myDll.dll and the saved 20110412-myDll.dll_. - DELETE the old DLL. Verify that it is, in fact, gone.
- Search all drives for "myDll.DLL", including system folders. Verify that there are no instances of the old DLL other than the renamed version in the "save" folder.
- Reboot
- The old DLL has, again, magically reappeared.
The user account I'm using for this has full admin rights to the machine. I haven't been able to find any running process that should do this, and our IT department is stumped.
Anyone have any suggestions?
Update
Just for the hell of it, I started one of the machines in safe mode, installed the new DLL, and restarted again. This time the change appears to have worked, even after a subsequent restart. Weird.
I can do this on the other machines that exhibit the same problem, and I expect it to work, but I'd really like to know what the problem is. Argh.