由于用户的困惑,我们的应用程序需要分别安装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?>
问题是,我不能让这张支票正常工作。它要么一直在触发,要么一直不触发。这样做的目的是根据编译时Win64
变量检查运行时msix64
变量的存在,如果这两个变量不一致,则抛出一个错误,但是逻辑并没有按照我想要的方式工作。有没有人想出更好的解决方案?
发布于 2010-03-18 01:19:09
仅在32位包中包含条件元素(即使用?if?预处理器语句)。条件应该是"NOT Msix64":启动条件是必须为真的,所以如果设置了Msix64,启动条件将失败,这意味着它是x64 OS和32位软件包,正确的做法是阻止。
发布于 2010-03-18 09:10:30
我们使用以下代码...
<?if $(var.ProcessorArchitecture)=x86 ?>
<Condition Message="!(loc.LaunchCondition_Error64)">
<![CDATA[Installed OR Not VersionNT64]]>
</Condition>
<?endif?>
发布于 2010-03-17 08:29:59
condition元素与windows installer属性一起使用,这些属性在安装过程中存在。
但是,您将Win64
定义为wix变量,而不是windows installer属性。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 installer数据库(即MSI文件)中记录"Win64“属性,并且该属性将在安装期间可用于条件元素中。
https://stackoverflow.com/questions/2458550
复制相似问题