如何获取 Wix v4 中的 MSVC 运行时库位置?

问题描述 投票:0回答:1

在我的 Wix 安装程序中,由于文件较小,我集成了 MSVC 可再发行运行时库,而不是完整的 VC Redist 包。在我的机器上,这些文件位于

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.38.33130\x86\Microsoft.VC143.CRT
。现在我想从 Wix 中的变量获取该路径,因为该路径会根据 Visual Studio 版本、MSVC 版本等而有所不同。

MSBuild 提供了一个宏

$(VC_CppRuntimeFilesPath_x86)
,它可以解析为
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.38.33130\x86
,从那里我可以轻松构建正确的路径。

我尝试了这些说明中的语法将 MSBuild 宏捕获到 Wix 预处理器变量中。

<!-- Setup.wixproj -->
<Project Sdk="WixToolset.Sdk/4.0.3">
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <DefineConstants>Debug</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Label="Globals">
    <DefineConstants>MsvcCrtX86=$(VC_CppRuntimeFilesPath_x86);MsvcCrtX64=$(VC_CppRuntimeFilesPath_x64);</DefineConstants>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="WixToolset.UI.wixext" Version="4.0.3" />
  </ItemGroup>
</Project>
<!-- Product.wxs -->
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
  ...
  <Fragment>
    <ComponentGroup>
      <Component Id="VCRT32" Directory="INSTALLFOLDER" Bitness="always32">
        <File Source="$(var.MsvcCrtX86)\concrt140.dll" />
        <File Source="$(var.MsvcCrtX86)\msvcp140.dll" />
        <File Source="$(var.MsvcCrtX86)\msvcp140_1.dll" />
        <File Source="$(var.MsvcCrtX86)\msvcp140_2.dll" />
        <File Source="$(var.MsvcCrtX86)\msvcp140_atomic_wait.dll" />
        <File Source="$(var.MsvcCrtX86)\msvcp140_codecvt_ids.dll" />
        <File Source="$(var.MsvcCrtX86)\vccorlib140.dll" />
        <File Source="$(var.MsvcCrtX86)\vcruntime140.dll" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>

不幸的是,Wix 预处理器中的

MsvcCrtX86
MsvcCrtX64
变量保持为空。我的疑问是,MSBuild 仅填充
$(VC_CppRuntimeFilesPath_x86)
和类似的宏用于
.vcxproj
项目,而不是 SDK 样式项目。

msbuild wix wix4 vcredist
1个回答
0
投票

您可以像下面一样检查并执行 VC redist

注意条件

版本 NT64 且(不是 VC2015x64Installed 或 VC2015x64BuildNumber < "31938"

<ExePackage Id="VC2015Redist"
      SourceFile="$(var.SolutionDir)build\vc2015redist-extracted\VC2015redist-x64.exe"
      Vital="yes"
      Permanent="yes"
      Compressed="yes"
      Cache="no"
      SuppressSignatureVerification="yes"
      InstallCondition="VersionNT64 AND (NOT VC2015x64Installed OR VC2015x64BuildNumber &lt; &quot;31938&quot;)"
      InstallCommand = "/install /quiet /norestart"
      >
© www.soinside.com 2019 - 2024. All rights reserved.