[wix-users] VC redist merge module: 64-bit DLL copied to 32-bit Windows folder

Daan Nusman d.nusman at re-lion.com
Wed Sep 2 02:44:20 PDT 2015


I've used dark to extract a .wsx file from the MS Merge module. I'm not sure
what attributes you mean, but I cannot find any that are set. I would be
modifying an MS-provided merge module, which seems strange to me anyway. See
http://pastebin.com/Em27du9z for the extracted WXS file.

I forgot to metion (sorry) I used the latest beta VS2015 version
(3.10.0.2026). This might have something to with the "Re: [wix-users] SWID
tag in 64 bit MSI" mails in this mailing list. So, I tried to use th WiX
version at http://wixtoolset.org/releases/v3-10-0-2101/ posted by Rob
Mensching, but the DLL is still copied to the SysWOW64 folder.

Another hint might be this in the install log:

MSI (s) (BC:40) [11:56:18:651]: Executing op:
ComponentRegister(ComponentId={B33258FD-750C-3B42-8BE4-535B48E97DB4},KeyPath
=C:\Windows\SysWOW64\vcruntime140.dll,State=3,,Disk=1,SharedDllRefCount=1,Bi
naryType=0)
MSI (s) (BC:40) [11:56:18:651]: WIN64DUALFOLDERS: 'C:\Windows\system32\'
will substitute 20 characters in 'C:\Windows\SysWOW64\vcruntime140.dll'
folder path. (mask argument = 1, the folder pair's iSwapAttrib member = 1).

~ Daan 
-----Original Message-----
From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf Of
Phil Wilson
Sent: Tuesday, September 1, 2015 20:37
To: 'WiX Toolset Users Mailing List' <wix-users at lists.wixtoolset.org>
Subject: Re: [wix-users] VC redist merge module: 64-bit DLL copied to 32-bit
Windows folder

I'd check the Component table in the msm to be sure that it's got the 256
bit (64 bit) set in the attributes. Everything else seems ok at a quick
glance. 

Phil  

-----Original Message-----
From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf Of
Daan Nusman
Sent: Tuesday, September 01, 2015 4:15 AM
To: wix-users at lists.wixtoolset.org
Subject: [wix-users] VC redist merge module: 64-bit DLL copied to 32-bit
Windows folder

Hi everyone,

 

I need to include the VS2015 C++ x64 runtime merge module into my project.
The install works without errors, and my own files are copied correctly,
however my app cannot start due to msvcp140.dll not being found. 

 

I've extracted an installer log, and it seems to claim to have installed the
files. Here's an example:

 

MSI (s) (BC:40) [11:56:18:667]: Executing op:
SetTargetFolder(Folder=C:\Program Files\RE-liON\RLaunch\)

MSI (s) (BC:40) [11:56:18:667]: Executing op:
SetSourceFolder(Folder=1\RE-liON\RLaunch\)

MSI (s) (BC:40) [11:56:18:667]: Executing op:
FileCopy(SourceName=RLaunch.exe,SourceCabKey=MainAppExe,DestName=RLaunch.exe
,Attributes=512,FileSize=315904,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,
Version=1.0.0.1,Language=1033,InstallMode=58982400,,,,,,,)

MSI (s) (BC:40) [11:56:18:667]: File: C:\Program
Files\RE-liON\RLaunch\RLaunch.exe;      To be installed; Won't patch;
No existing file

MSI (s) (BC:40) [11:56:18:667]: Source for file 'MainAppExe' is compressed

MSI (s) (BC:40) [11:56:18:683]: Executing op:
SetTargetFolder(Folder=C:\Windows\SysWOW64\)

MSI (s) (BC:40) [11:56:18:683]: Executing op:
SetSourceFolder(Folder=1\System64\)

MSI (s) (BC:40) [11:56:18:683]: Executing op:
FileCopy(SourceName=msvcp140.dll,SourceCabKey=msvcp140.dll.A38EBF59_3A35_375
9_B824_C9816882FA56,DestName=msvcp140.dll,Attributes=512,FileSize=635040,Per
Tick=65536,,VerifyMedia=1,,,,,CheckCRC=0,Version=14.0.23026.0,Language=1033,
InstallMode=58982400,,,,,,,)

MSI (s) (BC:40) [11:56:18:683]: File: msvcpm;       To be installed; Won't
patch;      No existing file

MSI (s) (BC:40) [11:56:18:683]: Source for file
'msvcp140.dll.A38EBF59_3A35_3759_B824_C9816882FA56' is compressed

 

So, it copies a msvcp140.dll to the SysWOW64 folder. Oops, that should be
target for 32 bit DLLs, this DLL should to go System32. I've confirmed
(using Dependency Walker) that the file is indeed in SysWO64 and is 64 bits.


 

I cannot figure out how to fix this. Am I missing some x64 flags?

 

Relevant wsx part:

 

<Directory Id="TARGETDIR" Name="SourceDir">  <!-- runtime-value of
TARGETDIR: C:\ -->

      <!-- Merge module for Visual C++ Runtime DLLs (msvcp140.dll)  -->

      <!-- Location usually C:\Program Files (x86)\Common Files\Merge
Modules -->

      <!-- You will need to update this when you update visual C++-->

      <Merge Id="CRT" Language="0"
SourceFile="$(env.CommonProgramFiles)\Merge
Modules\Microsoft_VC140_CRT_x64.msm" DiskId="1" />

 

The complete log: http://pastebin.com/JJwmzsFd   (copies seem to start
around line 620)

The complete source .wsx file: http://pastebin.com/jnnBUiBe 

 

Thanks,

Daan Nusman


____________________________________________________________________
WiX Toolset Users Mailing List provided by FireGiant
http://www.firegiant.com/



____________________________________________________________________
WiX Toolset Users Mailing List provided by FireGiant
http://www.firegiant.com/




More information about the wix-users mailing list