wixtoolset v4如何在bundle项目中使用内置变量?

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

我有一个wix v4捆绑器项目,这是Bundle.wxs的内容,我希望[ProgramFiles64Folder]可以更改为c:\Program Files,但实际上它保留了“[ProgramFiles64Folder]”原样。 我查了文档https://wixtoolset.org/docs/tools/burn/builtin-variables/,它支持很多内置变量,那么我们如何使用这个bundle.wxs文件中的内置变量?

<?include Variables.wxi ?>
<Wix xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns="http://wixtoolset.org/schemas/v4/wxs">
  <Bundle Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="$(var.ManufacturerName)"
          UpgradeCode="39FA01F0CAD240169A99464AD20176DF">
    <BootstrapperApplication>
      <bal:WixStandardBootstrapperApplication LicenseFile="$(var.ResourceDir)License.rtf" LogoFile="Logo.png"
                                              Theme="rtfLicense" />
    </BootstrapperApplication>
    <Chain>
      <MsiPackage SourceFile="$(var.MsiInstaller.TargetDir)Installer.msi" ForcePerMachine="yes">
        <MsiProperty Name="INSTALLDIR" Value="[InstallFolder]" />
      </MsiPackage>
    </Chain>
    <Variable Name="InstallFolder" Type="string" Value="[ProgramFiles64Folder]$(var.ManufacturerName)\$(var.ProductName)" />
    <Variable Name="LaunchTarget" Value="[InstallFolder]\Installer.exe" />
  </Bundle>
</Wix>

我也尝试过使用RegistrySearch,它对我来说也不起作用。如果有任何建议,我将不胜感激 类似的代码也适用于 wix3,但不适用于 wix 4。

我在github上做了一个例子https://github.com/idiotsky/WixResearch/ 在第一次提交中,一切都按预期工作,但是当我将 wix 项目更改为 SDK 样式后,它不再工作了。我只是有一个临时解决方案使用 $(env.ProgramW6432)\ 替换 [ProgramFiles64Folder],但这仍然无法解决问题,因为 $(env.ProgramW6432) 将使用构建计算机上的值而不是安装目标计算机上的值。

windows-installer wix4
1个回答
0
投票

我相信我可以帮助您解决注册表搜索问题。首先,您需要转到 - 管理 nuget 包 - 捆绑项目并安装“wixtoolset.util”包。然后在捆绑文件的顶部添加: '"http://wixtoolset.org/schemas/v4/wxs/util"' - 在第一个 wix 标签中。

然后例如使用:

<util:RegistrySearch Id="Installtype"
        Variable="InstallType"
        Root="HKLM"
        Key="SOFTWARE\...\...\key"
        />

我在同一条船上 - 我的很多 wix v3 项目内容不再起作用,并且很多关键字已经更改 - 文档似乎有点稀缺,但希望这有所帮助

抱歉,第一次 xmlns 错误 - 已编辑以更正它

© www.soinside.com 2019 - 2024. All rights reserved.