[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 23:41:34 PDT 2015


Thanks for the info, I'm obviously not well-versed in MSI's.  I had a look
using Orca. This is the row for vcruntime140.dll (there are more C++/C DLLs)

component:
vcruntime140.dll_system_amd64.A38EBF59_3A35_3759_B824_C9816882FA56	
compnendid: {B33258FD-750C-3B42-8BE4-535B48E97DB4}	
directoty: SystemFolder_amd64_VC.A38EBF59_3A35_3759_B824_C9816882FA56	
attributes: 0		
keypath: vcruntime140.dll.A38EBF59_3A35_3759_B824_C9816882FA56

So, no 64-bits flags set. None of the DLLs have them set. So it seems the
x64 CRT merge module provided  with VS2015 is buggy. I'll try to submit a
bug report to MS somewhere. Thanks for your help!

~ Daan

-----Original Message-----
From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf Of
Phil Wilson
Sent: Wednesday, September 2, 2015 19:13
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 did not suggest changing the merge module. I am suggesting you open it
with Orca, go to the Component table, look at the Attributes column and see
if the 64-bit attribute is set, the value should include 256. If it's not
there it's probably a bug. 

It's also interesting that your Dark extract wxs uses properties such as
VersionNT where you would expect VersionNT64, and the component does not
have a Win64="yes" as you'd expect from a 64-bit Component. The log you
previously posted and the Dark data seem to indicate that the merge module
is 32-bit, hence my suggestion to look at it with Orca. 

Phil 
 
-----Original Message-----
From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On Behalf Of
Daan Nusman
Sent: Wednesday, September 02, 2015 2:44 AM
To: 'WiX Toolset Users Mailing List'
Subject: Re: [wix-users] VC redist merge module: 64-bit DLL copied to 32-bit
Windows folder

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/



____________________________________________________________________
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