Question

I'm using Visual Studio 2010 with the free version of Installshield. The application includes an ActiveX component which is called from Excel. The "Register for COM Interop" option is checked on the project Build properties page. When I run the install on an XP machine, the dll does not get registered. If I manually run the regasm /tlb: command, the application works.

Questions: 1. How to verify through the installshield log file that the registration was run? 2. What kind of error message would the log show if the registration failed? 2. Does installshield require that the dll be strong named? (It is not) 3. Are there other troubleshooting suggestions?

Thanks in advance,

Currie

Was it helpful?

Solution

Here's how I handle this situation:

1) Establish a clean OS.

2) Install your software.

3) use a registry compare utility such as InstallWatch Pro to snapshot the registry.

4) call Regasm.

5) capture the registry again and create a delta. Filter out unrelated changes.

6) Author those changes back into the InstallShield project. Rebuild and repeat the process to verify success.

So why is this broken? I usually find it as a result of a known behavior in Regasm.

When you set COM Interop = true you are telling InstallShield to call regasm /regfile and then scrape that data and author it into the installer during the build. But here's the catch:

(Emphasis added)

You can use the /regfile option to generate a .reg file that contains the registry entries instead of making the changes directly to the registry. You can update the registry on a computer by importing the .reg file with the Registry Editor tool (Regedit.exe). Note that the .reg file does not contain any registry updates that can be made by user-defined register functions. Note that the /regfile option only emits registry entries for managed classes. This option does not emit entries for TypeLibIDs or InterfaceIDs.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top