Video Screencast Help
Search Video Help Close Back
to help
New in the Rewards Catalog: Vouchers for "Symantec Technical Specialist" and "Symantec Certified Specialist" exams.

using a 64-bit merge module in a 32+64-bit MSI

Updated: 24 May 2010 | 5 comments
Alan Sinclair 2's picture
0 0 Votes
Login to vote

(Pre-question: is there a better search than the single box labeled "Search forums"?  I'd love to search just this forum but searching all forums rarely gets answers relevant here.)

I ship a product as a 64-bit merge module (also as 32-bit MSM but that's not at issue here.) Recently a customer is asking if they can use my 64-bit MSM in a dual-mode MSI, that is in a 32-bit MSI which includes 64-bit components. Is this likely to be possible?  I'd always thought a 64-bit install required a 64-bit MSI, but the customer insists I'm wrong.

The customer says they can create a 32-bit MSI which includes 64-bit components.  (The customer is also using WIS 7.)  When they add my 64-bit MSM into their MSI, my files are installed to Program Files (x86) instead of to Program Files, so my custom actions don't find files where they expect. I can add code to check for WoW etc but don't want the hassle if this is an illegal way of doing things.

Thanks

Comments

ohzone's picture
19
Nov
2009
0 Votes 0
Login to vote

In answer to your "pre-question"

Alan,

You can't seach just this forum as you are asking but if you put your search terms in the "Search forums" box you can then filter the results by using the filters found in the left hand nav. Filter by product (this forum) and forums (see the pic below) and the resulting items will be more along the lines of what you are looking for. Hope this is helpful...
Screen shot 2009-11-19 at 3.55.02 PM.png

Cheryl

Endpoint Management,
Endpoint Virtualization
Community Manager
www.twitter.com/EMnV_symc
Need Altiris help? IRC chat #Altiris

Alan Sinclair 2's picture
19
Nov
2009
0 Votes 0
Login to vote

thanks Cheryl, yes that's

thanks Cheryl, yes that's useful to know!
Alan

EdT's picture
20
Nov
2009
0 Votes 0
Login to vote

Mixing 32 bit and 64 bit

Mixing 32 bit and 64 bit components in a single install is possible, and you can find this information in the help file MSI.CHM which is installed with Wise, although a later version can also be found in the windows installer 4.5 SDK. Here is an extract from the "Component Table" page:

msidbComponentAttributes64bit 256 0x0100 Set this bit to mark this as a 64-bit component. This attribute facilitates the installation of packages that include both 32-bit and 64-bit components. If this bit is not set, the component is registered as a 32-bit component.

If this is a 64-bit component replacing a 32-bit component, set this bit and assign a new GUID in the ComponentId column.

So I guess it's up to you whether you want to spend any time updating your merge module for this requirement, or just let your customer do the work.

If your issue has been solved, please use the "Mark as Solution" link on the most relevant thread.

Alan Sinclair 2's picture
20
Nov
2009
0 Votes 0
Login to vote

Can a *32-bit* MSI include 64-bit components?

Thanks Ed -- my question wasn't quite specific enough.  It should be "can a 32-bit MSI install 64-bit components."   (I know a 64-bit MSI can install both 32- and 64- components.)

The components at issue are marked as 64-bit, that is, they have the msidbComponentAttributes64bit attribute set. The problem is that when the customer's 32-bit MSI includes our 64-bit merge module, our components are getting installed to the wrong place. The ProgramFiles64Folder property is changed by Windows Installer to point to C:\Program Files (x86)\  So the 64-bit files are installed to the wrong directory (in which they cannot work -- they rely on being in a subdir of C:\Program Files\) 

 
Here's the log fragment showing the change:
 
MSI (c) (8C:58) [14:49:48:728]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\' folder path. (mask argument = 0, the folder pair's iSwapAttrib member = 0).

MSI (c) (8C:58) [14:49:48:728]: PROPERTY CHANGE: Modifying ProgramFiles64Folder property. Its current value is 'C:\Program Files\'. Its new value: 'C:\Program Files (x86)\'.
 
This page at MSDN http://msdn.microsoft.com/en-us/library/aa367451(VS.85).aspx  implies (but not definitively) that a 64-bit MSI can include 32-bit components, but not vice versa, so I'm hoping for enlightenment here. From MSDN:
 
A Windows Installer package must be specified as either a 32-bit or a 64-bit package; it cannot be specified as neutral. On a computer using a 64-bit operating system, the Windows Installer service is hosted in a 64-bit process that installs both 32-bit and 64-bit packages. Windows Installer installs three types of Windows installer packages on a computer running a 64-bit operating system:

32-bit packages that contain only 32-bit components.

64-bit packages containing some 32 bit components.

64-bit packages containing only 64 bit components.
 
So do we need to re-write our stuff so it can work from any location?  We have always relied on our specific install subdirectory being below Program Files, so we can find the binaries.

Thanks
Alan

EdT's picture
23
Nov
2009
0 Votes 0
Login to vote

I suspect this issue revolves

I suspect this issue revolves around the directory table, and what ProgramFilesFolder resolves to when you specify a 32 bit template and when you specify a 64 bit template.
Have you had a look at this aspect?

If your issue has been solved, please use the "Mark as Solution" link on the most relevant thread.