Archive: Windows 64 bit issues


Windows 64 bit issues
Hello everyone!

I'm having an issue getting my app to run on Windows 64 platforms. Until recently we were using WISE to install our software and since they lack Unicode support, we decided to move over to NSIS. We are using the Unicode version, but I'm going by the assumption that is irrelevant to the issue at hand.

Lets jump right to the juice. The problem I'm having is that my app is not able to use COM classes defined in some of the DLL's I'm installing. The error code I'm getting is 80040154. At first I was registering the DLL using RegDLL in NSIS, nothing fancy. Then I found out about the SysWoW64 version of regsvr32 so I figured maybe, just maybe, NSIS wasn't using the right version so I modified my installer to use the regsvr32 manually, using the right one depending on 32 vs 64 bit OS. Still the same error.

So I went to the command prompt (in admin-mode) and registered all my DLL's using one version of regsvr32, tried the app, then the other version, tried the app again. Always the same message no matter what.

I have then used regedit to look up the registry. The classes seem to be registered properly, I can't see anything wrong with it. Also, the user I'm using to run these test is a local admin. I have made sure he has access to all the keys relating to the DLL in question and he has "Full Control" over everything, from registry entries to the app folder, files, etc.

I have tried running the installer, as well as the application w/ admin override (Run As administrator) and still the same thing.

Does anyone have any idea of what might be wrong? I can't tell if it's the installation process or something else that's the problem. I'm running out of options fast.

Any help would be appreciated.


Ah! Found the problem but not sure I'm understanding it fully. It's not NSIS related. My app is composed of a mix of VB.NET and C++ (COM and plain, no DOTNET) and my VB apps/DLL's were configured to compile for "AnyCPU". Apparently, this was causing the app to not be able to load the 32 bit COM objects. I'm guessing all my VB layer was defaulting to 64 bits and trying to load 64 bit versions of my COM objects (which do not exist).