Registering COM Object on Windows 64-bit For Use In Excel-32 Bit Is Failing

73 Views Asked by At

I have an Excel application that uses a COM object.

The COM object is VB.net and compiled in Visual Studio targeted to "Any CPU".

I am registering the COM object for the current user only. My NSIS installer does the following:

  1. NSIS runs Regasm and outputs a reg file.

  2. NSIS replaces all instances of "[HKEY_CLASSES_ROOT" with "[HKEY_CURRENT_USER\Software\Classes" in the reg file.

  3. NSIS executes the reg file and all the appropriate registry entries are created.

This works fine on:

Windows 10 64-bit / Excel 64-bit

Windows 10 32-bit / Excel 32-bit

However, I am hitting an error with:

Windows 10 64-bit / Excel 32-bit

For Windows 10 64-bit / Excel 32-bit my understanding is I must replace "[HKEY_CLASSES_ROOT" with "[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node"

I am doing this in NSIS but Excel 32-bit is raising the error "Cannot create ActiveX component."

I tried replacing "[HKEY_CLASSES_ROOT" with "[HKEY_CURRENT_USER\SOFTWARE\Classes" but then Excel raises the error "Class not registered."

If I change the reg file to simply use "[HKEY_CLASSES_ROOT" (and forget about the registering for the current user) Excel 32-bit can the instantiate the COM object fine.

The problem is I want to register the COM object for the current user only.

What registry path should I be using that will be for the current user but Excel 32-bit on a Windows 64-bit can instantiate it?

Here is the reg file that is failing where "[HKEY_CLASSES_ROOT" has been replaced with "[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node":


[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.My.MySettings]
@="LicenseManager.My.MySettings"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.My.MySettings\CLSID]
@="{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}]
@="LicenseManager.My.MySettings"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.My.MySettings"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.My.MySettings"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\ProgId]
@="LicenseManager.My.MySettings"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedEnums]
@="LicenseManager.clsSharedEnums"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedEnums\CLSID]
@="{E24584F3-CD27-34B7-B8B5-4986784ACEE6}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}]
@="LicenseManager.clsSharedEnums"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\ProgId]
@="LicenseManager.clsSharedEnums"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedGlobals]
@="LicenseManager.clsSharedGlobals"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedGlobals\CLSID]
@="{E86A81E1-2926-3C9D-A667-02954898E09E}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}]
@="LicenseManager.clsSharedGlobals"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedGlobals"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedGlobals"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\ProgId]
@="LicenseManager.clsSharedGlobals"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedMethods]
@="LicenseManager.clsSharedMethods"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedMethods\CLSID]
@="{09CFD406-B291-33AC-A0CD-145760ED3428}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}]
@="LicenseManager.clsSharedMethods"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedMethods"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedMethods"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\ProgId]
@="LicenseManager.clsSharedMethods"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedValidations]
@="LicenseManager.clsSharedValidations"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsSharedValidations\CLSID]
@="{3992C5E2-1D50-3A99-B951-B6D2B83FF365}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}]
@="LicenseManager.clsSharedValidations"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedValidations"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedValidations"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\ProgId]
@="LicenseManager.clsSharedValidations"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsEnums]
@="LicenseManager.clsEnums"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsEnums\CLSID]
@="{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}]
@="LicenseManager.clsEnums"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\ProgId]
@="LicenseManager.clsEnums"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsLM]
@="LicenseManager.clsLM"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsLM\CLSID]
@="{D7128D56-C022-3F4A-9200-777C260C40EA}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}]
@="LicenseManager.clsLM"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsLM"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsLM"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\ProgId]
@="LicenseManager.clsLM"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsPublicTypes]
@="LicenseManager.clsPublicTypes"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.clsPublicTypes\CLSID]
@="{47913F05-609A-384C-A44A-26735CCC1F57}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}]
@="LicenseManager.clsPublicTypes"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsPublicTypes"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsPublicTypes"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\ProgId]
@="LicenseManager.clsPublicTypes"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.JSONLicense]
@="LicenseManager.JSONLicense"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\LicenseManager.JSONLicense\CLSID]
@="{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}]
@="LicenseManager.JSONLicense"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.JSONLicense"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.JSONLicense"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\ProgId]
@="LicenseManager.JSONLicense"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\Record\{46C43862-DC65-3BF1-8D9A-B315AF9FA80D}\1.0.0.0]
"Class"="LicenseManager.clsSharedEnums+enuLMForms"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\Record\{7DAF1AFB-548E-3A9C-B003-BBFCFEE27533}\1.0.0.0]
"Class"="LicenseManager.clsEnums+enuLicenseErrors"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\Record\{12C1B614-7200-38DB-A4C3-D88B23300A65}\1.0.0.0]
"Class"="LicenseManager.clsLM+enuChangeSettingsIniFile"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\Record\{40B82F7E-0D53-39AC-982C-3B0D058F65D9}\1.0.0.0]
"Class"="LicenseManager.clsLM+enuCertificateOverride"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node\Record\{2AFA5EDE-930C-3023-848E-B8B58963FF24}\1.0.0.0]
"Class"="LicenseManager.clsPublicTypes+typLicenseInfo"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/LicenseManager.dll"

And here is the reg file that registers to [HKEY_CLASSES_ROOT] for all users. Strangely, if I do TWO reg file imports:

  1. A reg file import to [HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node

and

  1. A second reg file import to "[HKEY_CLASSES_ROOT"

then the COM objects are able to instantiate on Windows 64-bit in Excel 32-bit.

I have to import both to "[HKEY_CLASSES_ROOT" and "[HKEY_CURRENT_USER\SOFTWARE\Classes\WOW6432Node" for it to work.

I need to understand what is going on here and what the correct approach is.

Here is the reg file that imports to "[HKEY_CLASSES_ROOT":


[HKEY_CLASSES_ROOT\LicenseManager.My.MySettings]
@="LicenseManager.My.MySettings"

[HKEY_CLASSES_ROOT\LicenseManager.My.MySettings\CLSID]
@="{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}"

[HKEY_CLASSES_ROOT\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}]
@="LicenseManager.My.MySettings"

[HKEY_CLASSES_ROOT\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.My.MySettings"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.My.MySettings"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\ProgId]
@="LicenseManager.My.MySettings"

[HKEY_CLASSES_ROOT\CLSID\{4DA8C0C5-425F-38A6-B63A-CD1090B22B25}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedEnums]
@="LicenseManager.clsSharedEnums"

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedEnums\CLSID]
@="{E24584F3-CD27-34B7-B8B5-4986784ACEE6}"

[HKEY_CLASSES_ROOT\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}]
@="LicenseManager.clsSharedEnums"

[HKEY_CLASSES_ROOT\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\ProgId]
@="LicenseManager.clsSharedEnums"

[HKEY_CLASSES_ROOT\CLSID\{E24584F3-CD27-34B7-B8B5-4986784ACEE6}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedGlobals]
@="LicenseManager.clsSharedGlobals"

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedGlobals\CLSID]
@="{E86A81E1-2926-3C9D-A667-02954898E09E}"

[HKEY_CLASSES_ROOT\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}]
@="LicenseManager.clsSharedGlobals"

[HKEY_CLASSES_ROOT\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedGlobals"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedGlobals"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\ProgId]
@="LicenseManager.clsSharedGlobals"

[HKEY_CLASSES_ROOT\CLSID\{E86A81E1-2926-3C9D-A667-02954898E09E}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedMethods]
@="LicenseManager.clsSharedMethods"

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedMethods\CLSID]
@="{09CFD406-B291-33AC-A0CD-145760ED3428}"

[HKEY_CLASSES_ROOT\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}]
@="LicenseManager.clsSharedMethods"

[HKEY_CLASSES_ROOT\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedMethods"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedMethods"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\ProgId]
@="LicenseManager.clsSharedMethods"

[HKEY_CLASSES_ROOT\CLSID\{09CFD406-B291-33AC-A0CD-145760ED3428}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedValidations]
@="LicenseManager.clsSharedValidations"

[HKEY_CLASSES_ROOT\LicenseManager.clsSharedValidations\CLSID]
@="{3992C5E2-1D50-3A99-B951-B6D2B83FF365}"

[HKEY_CLASSES_ROOT\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}]
@="LicenseManager.clsSharedValidations"

[HKEY_CLASSES_ROOT\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsSharedValidations"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsSharedValidations"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\ProgId]
@="LicenseManager.clsSharedValidations"

[HKEY_CLASSES_ROOT\CLSID\{3992C5E2-1D50-3A99-B951-B6D2B83FF365}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsEnums]
@="LicenseManager.clsEnums"

[HKEY_CLASSES_ROOT\LicenseManager.clsEnums\CLSID]
@="{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}"

[HKEY_CLASSES_ROOT\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}]
@="LicenseManager.clsEnums"

[HKEY_CLASSES_ROOT\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsEnums"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\ProgId]
@="LicenseManager.clsEnums"

[HKEY_CLASSES_ROOT\CLSID\{3D8E218E-9BC7-39A1-A513-FCD7A8F3B29C}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsLM]
@="LicenseManager.clsLM"

[HKEY_CLASSES_ROOT\LicenseManager.clsLM\CLSID]
@="{D7128D56-C022-3F4A-9200-777C260C40EA}"

[HKEY_CLASSES_ROOT\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}]
@="LicenseManager.clsLM"

[HKEY_CLASSES_ROOT\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsLM"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsLM"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\ProgId]
@="LicenseManager.clsLM"

[HKEY_CLASSES_ROOT\CLSID\{D7128D56-C022-3F4A-9200-777C260C40EA}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.clsPublicTypes]
@="LicenseManager.clsPublicTypes"

[HKEY_CLASSES_ROOT\LicenseManager.clsPublicTypes\CLSID]
@="{47913F05-609A-384C-A44A-26735CCC1F57}"

[HKEY_CLASSES_ROOT\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}]
@="LicenseManager.clsPublicTypes"

[HKEY_CLASSES_ROOT\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.clsPublicTypes"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.clsPublicTypes"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\ProgId]
@="LicenseManager.clsPublicTypes"

[HKEY_CLASSES_ROOT\CLSID\{47913F05-609A-384C-A44A-26735CCC1F57}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\LicenseManager.JSONLicense]
@="LicenseManager.JSONLicense"

[HKEY_CLASSES_ROOT\LicenseManager.JSONLicense\CLSID]
@="{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}"

[HKEY_CLASSES_ROOT\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}]
@="LicenseManager.JSONLicense"

[HKEY_CLASSES_ROOT\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="LicenseManager.JSONLicense"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\InprocServer32\1.0.0.0]
"Class"="LicenseManager.JSONLicense"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\ProgId]
@="LicenseManager.JSONLicense"

[HKEY_CLASSES_ROOT\CLSID\{E01DBF39-ED8E-3975-8ECF-BA43D3D73DFF}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]

[HKEY_CLASSES_ROOT\Record\{46C43862-DC65-3BF1-8D9A-B315AF9FA80D}\1.0.0.0]
"Class"="LicenseManager.clsSharedEnums+enuLMForms"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\Record\{7DAF1AFB-548E-3A9C-B003-BBFCFEE27533}\1.0.0.0]
"Class"="LicenseManager.clsEnums+enuLicenseErrors"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\Record\{12C1B614-7200-38DB-A4C3-D88B23300A65}\1.0.0.0]
"Class"="LicenseManager.clsLM+enuChangeSettingsIniFile"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\Record\{40B82F7E-0D53-39AC-982C-3B0D058F65D9}\1.0.0.0]
"Class"="LicenseManager.clsLM+enuCertificateOverride"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"

[HKEY_CLASSES_ROOT\Record\{2AFA5EDE-930C-3023-848E-B8B58963FF24}\1.0.0.0]
"Class"="LicenseManager.clsPublicTypes+typLicenseInfo"
"Assembly"="LicenseManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/MatthewB/AppData/Local/Stat Cruncher/Bin/licensemanager.dll"```
2

There are 2 best solutions below

0
MatthewNYC On BEST ANSWER

I tried Albert's suggestion of making sure my NSIS installer was using RegAsm.exe in the 64-bit path at:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe

However, I compared the reg file created by the 64-bit RegAsm to the reg file created by the 32-bit Regasm and they were identical.

I then realized that on Windows 64-bit registering a COM object for Excel-32 bit that I had to make sure the reg file was imported into the 32-bit view of the registry and not the 64-bit view.

I accomplished this by using the following command in my NSIS installer:

SetRegView 32

This did the trick and the COM object was now recognized by Excel 32-bit.

0
Albert D. Kallal On

Are you running the x32 bit version of regasm on the x64 box? There are two versions, one for x64 bits, and one for x32 bits.

On the other hand, perhaps you 100% avoid registering the object, and have VBA "side" load the .dll, that way you don't have to register, and these days with the way computers are locked down, then you would require zero changes to the registry, and only require the .dll be copied to the target computer. And thus you would not require elevated rights for the installing.

I suppose it really depends on if a bunch/many Excel sheets need the COM object, or is this just one Excel application? My best guess is you not using regasm 32 bits.

So, the x64 bit one is found under:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe

And the x32 bit one is found under:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe

So, on a windows x64 bit machine, running x32 bit office/Excel?

Then you would use the 2nd version above of regAsm.exe