Join us for SoftSummit 2023. The 20th anniversary of the industry leading software monetization conference. April 18 and 20. Register Now

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
dmetzler
Level 6

Single .msi for both 32-bit and 64-bit installs?

I have an existing .msi installer with 32-bit components. This also needs to run in Vista 64-bit and work correctly.

Testing the current installer build on Vista 64-bit reveals that certain registry keys are not being written correctly. The installer .msi writes directly to a couple of registry keys during installation.

HKCR\CLSID\{231980AC-130D-49d6-8997-822E78EA46E5}\etc.
is being written to:
HKCR\Wow6432Node\CLSID\{231980AC-130D-49d6-8997-822E78EA46E5}\etc.

and

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\etc.
is being written to:
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\etc.

Specifically, the above is for a desktop icon (not a shortcut link). This works okay in Win32 (XP/Vista) but fails in Vista 64.

If I go hack the registry using regedit.exe and put in the correct keys, the desktop icon shows up correctly.

So...

Is there a way for force the registry keys to be written directly to the exact registry keys intended from a 32-bit installer (with all 32-bit components)?

I have tried setting the 64-bit component flag on a component, but get an error when building the installer project:

"Intel64 or AMD64 must be specified in the template of the Summary Stream."

What does this mean? I don't want to mark the entire .msi as 64-bit as it also needs to run in 32-bit windows.

Thanks in advance,

Don Metzler
Labels (1)
0 Kudos
3 Replies
DebbieL
Level 17

You can specify only one processor type for the Template Summary property of an .msi package. Therefore, you can't specify something like Intel and x64 in a single package. A package can have one value or the other, but not both. Although 32-bit installations run on 64-bit machines, they cannot install to 64-bit locations, as you noticed in your test. These are limitations of Windows Installer, as documented in About Windows Installer on 64-Bit Operating Systems on MSDN. Here's a link to a blog post that has more information:
http://blogs.msdn.com/heaths/archive/2008/01/15/different-packages-are-required-for-different-processor-architectures.aspx

Note that you can build two installations (one 32 bit and one 64 bit) from a single project by using release flags and by overriding the Template Summary property for different product configurations in the Releases view.
0 Kudos
dmetzler
Level 6

DebbieL wrote:
You can specify only one processor type for the Template Summary property of an .msi package. Therefore, you can't specify something like Intel and x64 in a single package. A package can have one value or the other, but not both. Although 32-bit installations run on 64-bit machines, they cannot install to 64-bit locations, as you noticed in your test. These are limitations of Windows Installer, as documented in About Windows Installer on 64-Bit Operating Systems on MSDN. Here's a link to a blog post that has more information:
http://blogs.msdn.com/heaths/archive/2008/01/15/different-packages-are-required-for-different-processor-architectures.aspx

Note that you can build two installations (one 32 bit and one 64 bit) from a single project by using release flags and by overriding the Template Summary property for different product configurations in the Releases view.


Thanks for the information. This confirms what I suspected.

Don
0 Kudos
Christopher_Pai
Level 16

This is all true, but if your willing to color outside of the lines and having a unified package is very important to you, there are those who say you can do this:

http://blog.deploymentengineering.com/2008/01/even-developers-are-concerned-about.html
0 Kudos