I recently migrated from 32-bit XP to 64-bit Vista. It was a bit of a shock, and I’m still trying to find my way around some of the differences; One of the more problematic issues I found is setting up legacy 32-bit apps, since these have DLLs that need to go into the appropriate System folder. The app that prompted this post uses a batch file to copy DLL and OCX files into C:\Windows\System32, then uses the system reg tool to register the files.

In 32-bit XP, you have:
C:\Windows\System - contains 16-bit system files
C:\Windows\System32 - contains 32-bit system files

In 64-bit Vista, you have:
C:\Windows\System32 - contains 64-bit system files
C:\Windows\SysWOW64 - contains 32-bit system files

Niiiice.

First thing was getting an easy way to run the RegSvr32.exe elevated, easily.
I ended up copying the entire file from
C:\Windows\System32\regsvr32.exe
to
C:\Users\\AppData\Roaming\Microsoft\Windows\SendTo\regsvr32.exe

I then edited the properties (of the copy in SendTo) to ‘Run as Administrator’.
Then, to register anything, just select the DLL or OCX file, right-click, Send To, regsvr32.exe. You can even select more than one file at a time, and you only get the one UAC prompt.

Next issue was the location for files. The app I installed copied all its DLLs and OCXs into System32, and then promptly failed when it tried to register them, with:
LoadLibrary failed : 0x8007007E (The specified module could not be found. )

I found the solution to this was to move the files from System32 into SysWOW64. Then, the register action magically worked.