System.Runtime.InteropServices.COMException (0x80040154)
-
02-10-2019 - |
Question
I am getting this error when I am trying to depoly my application on a target machine.
I googled and found that some of the dll's need to be registered (that are used in my application)
So, I copied the dll's to System32 and did regsvr32
I then got this error
Interop.ShockwaveFlashObject.dll was loaded bt DllRegisterServer entry point was not found. The file cannot be registered
And one strange thing is that, the application doesn't work on only one machine. I tested on 10 different machines and everything worked well. It did not work on only one machine.
Can someone please help me on this?
Solution
The Interop dll doesn't need to be registered it effectively contains a pointer to an existing COM registered object.
If it follows the usual naming convention it looks like ShockwaveFlashObject.dll is not registered on the machine (this would be the DLL you should run regsvr32 against). Presumably you need to install Shockwave/Flash (and/or check the version installed is the right one if you believe it's already on the box).
OTHER TIPS
For instance, you can run cmd as admin and browse to the system32 dir and run the following:
for %1 in (*.dll) do regsvr32 /s %1
and
for %1 in (*.ocx) do regsvr32 /s %1
That interop dll is not a COM dll which needs to be registered with regsvr32.dll, it is an interop dll which manages the link between the COM stuff and the managed stuff, I believe.
Probably you need to register some other dll (ie any & all COM dlls, probably ShockwaveFlashObject.dll) or you have some other missing dependency. what is different about the machine on which it doesn't work compared to the machines which it does work on? Are all dependencies installed on all machines (like flash?) Are the os's different? Maybe some newer os's don't have all of the old dependencies that older machines have.