1

When I go to register a dll as an admin on my machine it works fine:

Regsvr32 C:\nameofdll.dll

However when I run it on another machine it fails. Why is that?

Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164
JFrosty
  • 57
  • 8
  • 1
    The error can be caused due to the architecture of the machine, probably one of them is running in x86 and the other one in x64. I would recommend you this post to try to solve your problem: https://stackoverflow.com/questions/4897685/how-do-i-register-a-dll-file-on-windows-7-64-bit – Brank Victoria Sep 25 '18 at 15:53

1 Answers1

1

Error codes: Error codes can be looked up using one of these methods.


Regsvr32.exe - Admin Rights Required: As far as I know self-registration requires admin rights since it registers the DLL per-machine - or in other words in the HKLM / HKCR sections of the registry (HKCR is a view into a part of HKLM and a merge from sections of HKCU - in other words it is an "emergent view" from both HKCU and HKLM). Now I see this answer which seems to indicate that there are ways to register COM servers per user? It doesn't work for my test OCX files using this method. I did not try the custom registration EXE from codeproject.

MSI - Per-User COM Registration: Windows Installer - on the other hand - is able to install COM servers per-user for setups that install per-user. Per-user setups are bad for a number of reasons (serviceability, upgrading, patching, various limitations), but that is another story. If you enable Installshield's COM Extract On Build as I showed in another answer, the COM data is added to your MSI in a way that ensures that the COM server can be registered per-user - if the setup is installed per-user, or per-machine if the setup is installed per-machine. This is the standard way to register COM files using Windows Installer.

Bitness: Other problem causes are possible, such as the mentioned "bitness" of the COM server. I have encountered very few x64 COM servers, but they are problematic to deal with using WiX for example. As far as I know the WiX 3.11 release does not support x64 COM servers for extraction. Similar problems could exist in Installshield - I don't know.

Support Page: On a 64-bit version of Windows operating system, there are two versions of the Regsv32.exe file:

  • The 64-bit version is %systemroot%\System32\regsvr32.exe
  • The 32-bit version is %systemroot%\SysWoW64\regsvr32.exe

Lacking Dependencies: Self-registration can also fail if there are lacking dependencies for the file in question. You can use a tool such as dependency walker to check, or you can monitor with procmon or any number of scanner tools (have a quick skim). Note that it is also possible that you lack a "language dll" for the COM server. For example: MyApp-English.dll. Such a file should be located next to your main COM server file MyApp.dll or MyApp.ocx to allow registration to work correctly.

Oddities: Numerous other problems can be seen. Ranging from licensing issues, COM interoperability with .NET (regasm.exe), interference from weird security policies, security software interference - anti virus etc... To any number of other specific and rare factors.

Warning: I have seen self-registration perform illegal actions and change core system values during the self-registration process - without any warning or explanation. Hence the recommendation to avoid self-registration during deployment whenever possible.

Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164