我有一个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) 将使用构建计算机上的值而不是安装目标计算机上的值。
我相信我可以帮助您解决注册表搜索问题。首先,您需要转到 - 管理 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 错误 - 已编辑以更正它