cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
DemonPiggies
Level 7

[BUG?] Registering x86 .NET DLLs on a x64 machine

Upgraded our installer from 2010 to 2013... pure Installscript project

Everything on x86 works perfectly with almost no changes. No issues that I am away of. When installing on a x64 OS our two .NET DLLs are not being registered (via regasm.exe). If we manually register them everything works perferctly just like on a x86 OS. Installshield is running on a x86 Win7 VM. I noticed that in the .NET tab there are two textboxes for the location of RegAsm & InstallUtilLib. The x64 location is disabled. I'm wondering if this is part of the issue?

Everything works as expected on a 32-bit OS with no changes but does needs to be manually registered on a 64-bit OS.

I should say that the same files are installed on a x86 and x64 and that the component this is set to is "Sefl-Register" and "Local Assembly" and "Dependencies".
Labels (1)
0 Kudos
(5) Replies
Christopher_Pai
Level 16

Look for a property called ".NET COM Interop" this is what you want to use. When selected, InstallShield will call regasm /regfile during the build and then scrape the results and author it into the registry table. During the install the file is copied and the registry is applied without any need to call Regasm.

There is one gotcha. If you read the article on MSDN about Regasm you'll read that certain custom code implemented in your assembly doesn't get executed when you run Regasm /regfile. This is very rare but when encountered the workaround is to use a registry monitoring tool like InstallWatch Pro on a VM to capture the results of a manual regasm after installation. Then massage this data back into your ISM rebuild and retest. It should then work.

The other self registration options, COM extract at build and such is for native/unmanaged (Win32 DLLRegisterServer() ) stuff. It's not for managed / .net assemblies.
0 Kudos
DemonPiggies
Level 7

Apologies I should have said originally I'm using pure InstallScript so I don't have that option. I used the "/RegFile" option in RegAsm and added that to the component. I do not like this solution, as it feels like a hack, but it works. I didn't have this issue in 2010 with this project nor this particular component. Installation and registeration completed without any issues on both x86 and x64. I only had one componenet that needed the regfile created and I don't remember why, but seemingly it's probably the same issue.

Like I said the .Net tab in the Options has the x64 location disabled and honestly I think there's a link. We should be able to build a x64 installation on a x86 OS, been doing it for quite a while now.

But thank you for repsonding, if you have any more ideas I'm ready to try them out 🙂
0 Kudos
Christopher_Pai
Level 16

Sorry, I did pure InstallScript projects ( IS 3, 5, 5.5, 6 ) from 1996 to 2003. Since then I've done exclusively Basic MSI projects. It took me a year to drink the kool-aid.... while MSI does have it's faults, this is one area where it really makes sense.

In a pure InstallScript context I would harvest the regasm output and author that into an IS registry set. ( I assume they still have those by that name. ) This way IS applies the registry change. The point is to advoid 1) unneeded scripting 2) out of process calls at install time to RegAsm.
0 Kudos
DemonPiggies
Level 7

That's basically what I did. The "RegFile" flag in RegAsm creates a RegFile that I imported into IS and then connected the appropriate registry set to the appropriate component (just installs all the info directly into the GAC). I'm not a fan of this at all and would rather my files be registered at install-time like it was doing in IS2010 that it's not doing in IS2013.

I wouldn't mind had the info extracted at build-time or when the component is added to the project but I don't have those options.

We want to move to MSI but since I wear the title of Dev and Release I don't have extra time to sit and learn and then convert... want to and may do so in the near future but right now not an option 😕
0 Kudos
Christopher_Pai
Level 16

I would think a little build automation could call regasm /refile, scrape and transform the data then use the IS Automation Interface to emit it into the project before building. I don't know that I'd spend the $ on that though.

As for conversion, I just might know an affordable part time / remote resource to assist with that project. :cool:
0 Kudos