WiX:防止32位安装程序在64位Windows上运行

时间:2010-03-16 22:14:38

标签: wix installation windows-installer wix3 platform

由于用户混淆,我们的应用程序需要单独的安装程序,用于32位和64位版本的Windows。虽然32位安装程序在win64上运行良好,但它有可能造成支持问题,我们希望防止这种情况发生。

我想阻止32位MSI安装程序在64位Windows计算机上运行。为此,我有以下条件:

<Condition Message="You are attempting to run the 32-bit installer on a 64-bit version of Windows.">
  <![CDATA[Msix64 AND (NOT Win64)]]>
</Condition>

Win64的定义如下:

<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<?define Win64 ?>
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

事情是,我无法让这项检查正常工作。无论是一直开火,还是一无所有。目标是检查运行时msix64变量是否存在于编译时Win64变量中,如果这些变量没有对齐则抛出错误,但逻辑不起作用,我的意图如何至。有没有人想出更好的解决方案?

4 个答案:

答案 0 :(得分:15)

仅在32位软件包中包含Condition元素(即使用?if?预处理程序语句)。条件将是“NOT Msix64”:启动条件必须为true,因此如果设置了Msix64,则启动条件将失败,这意味着它是x64操作系统和32位软件包,正确的做法是块。

答案 1 :(得分:7)

我们使用以下内容......

<?if $(var.ProcessorArchitecture)=x86 ?>
<Condition Message="!(loc.LaunchCondition_Error64)">
    <![CDATA[Installed OR Not VersionNT64]]>
</Condition>
<?endif?>

答案 2 :(得分:3)

条件元素适用于安装过程中存在的Windows安装程序属性。

但是,您将Win64定义为wix变量,而不是Windows安装程序属性。 Wix变量仅在创建设置时存在。您必须将它们作为$(var.MyWixVariable)引用它们,然后wix预处理器将用它们定义的值替换它们。

我会尝试这样做:

<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<Property Id="Win64" Value="1" />
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

如果在创建安装程序时$(var.Platform)具有正确的值,则会导致在Windows安装程序数据库(即MSI文件)中记录“Win64”属性,并且该属性在安装期间可用用于条件元素。

答案 3 :(得分:3)

添加此条件

<Condition Message="This is designed for 32bit OS">%PROCESSOR_ARCHITECTURE ~= "x86" AND %PROCESSOR_ARCHITEW6432 &lt;&gt; "amd64"></Condition>

您可以使用32位组件和64位组件创建一个安装程序,并将这两个条件放在相应的组件中

<Component Id="bit32Component" Guid="..." Feature="ProductFeature">
    <Condition>%PROCESSOR_ARCHITECTURE~="x86" AND %PROCESSOR_ARCHITEW6432&lt;&gt;"amd64"></Condition>
</Component>
<Component Id="bit64Component" Guid="..." Feature="ProductFeature">
    <Condition>%PROCESSOR_ARCHITECTURE~="amd64" OR %PROCESSOR_ARCHITEW6432~="amd64"></Condition>
</Component>

这是我用过的参考资料

http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx