gpt4 book ai didi

wix - WiX 3.0 中的平台识别

转载 作者:行者123 更新时间:2023-12-04 01:28:38 25 4
gpt4 key购买 nike

将托管代码从 x86 迁移到 x64 平台时遇到问题。我有一个 WiX 项目来创建 MSI这将通过 Bootstrapper 执行。

在 x86 平台上,根据 Project.wxs 文件将文件复制到“Program Files”中。但是如果相同的 MSI 通过 Bootstrapper 安装在 x64 平台上,所有安装文件默认都被复制到“Program Files (x86)”中,并且应用程序的功能失败,因为它在 12-hive 层次结构中找不到必要的文件程序文件(对于 64 位,它是“C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG”)。

我曾尝试使用像 这样的预处理器变量,但我需要在项目属性中将此变量硬编码为 x86 或 x64。最后,我最终为两个不同的平台提供了两个不同的 MSI,这对我来说不是一个理想的解决方案。

那么,通过 WiX,是否可以识别平台以确保安装在所需的位置?

最佳答案

我不相信您将能够拥有一个支持两个平台的 MSI。您需要为 x86 和另一个 x64 创建一个 - 好消息是您不需要维护另一个 WiX 项目来实现这一点。

我过去这样做的方法是在产品定义的开头添加以下内容。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<?if $(var.Platform)=x64 ?>
<?define msiProductId = "102F7DF4-19A6-4d3d-987F-FF57A2031593" ?>
<?define win64Flag = "yes" ?>
<?else ?>
<?define msiProductId = "8AE46CAF-220F-4B9F-9527-D4A19A27C45B" ?>
<?define win64Flag = "no" ?>
<?endif ?>

<Product Id="$(var.msiProductId)"
Name="My Product"
Language="1033"
Version="1.0.0"
Manufacturer="Acme"
UpgradeCode="E2575E4A-A62E-4460-B96D-B722C79C8EAA">

<Package InstallerVersion="400"
Compressed="yes"
InstallPrivileges="elevated"
Platform="$(var.Platform)"
/>

<!-- Rest of product definition goes here -->

</Product>
</Wix>

我忘记了我从哪里得到了为每个平台使用不同 ProductID 的建议。

我创建了 'win64Flag' 变量以使其他 WiX 元素在跨平台场景中很好地工作。例如,以下是您如何使用它使单个 RegistrySearch 定义适用于两个平台,并且应该可以解决您在定位 12-hive 层次结构时遇到的问题。
<Property Id="WSE12DIRECTORY">
<RegistrySearch Id="Reg_WSE12DIRECTORY"
Type="raw"
Root="HKLM"
Key="SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0"
Name="Location"
Win64="$(var.win64Flag)"
/>
</Property>

完成所有这些后,只需在 Candle 上传递“平台”预处理器变量的相关值即可。命令行,或在 Visual Studio 中选择目标平台。

关于wix - WiX 3.0 中的平台识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com