首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WiX:阻止32位安装程序在64位Windows上运行

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

Stack Overflow用户
提问于 2010-03-17 06:14:38
回答 4查看 11.2K关注 0票数 18

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

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

代码语言:javascript
复制
<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的定义如下所示:

代码语言:javascript
复制
<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<?define Win64 ?>
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

问题是,我不能让这张支票正常工作。它要么一直在触发,要么一直不触发。这样做的目的是根据编译时Win64变量检查运行时msix64变量的存在,如果这两个变量不一致,则抛出一个错误,但是逻辑并没有按照我想要的方式工作。有没有人想出更好的解决方案?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-18 01:19:09

仅在32位包中包含条件元素(即使用?if?预处理器语句)。条件应该是"NOT Msix64":启动条件是必须为真的,所以如果设置了Msix64,启动条件将失败,这意味着它是x64 OS和32位软件包,正确的做法是阻止。

票数 15
EN

Stack Overflow用户

发布于 2010-03-18 09:10:30

我们使用以下代码...

代码语言:javascript
复制
<?if $(var.ProcessorArchitecture)=x86 ?>
<Condition Message="!(loc.LaunchCondition_Error64)">
    <![CDATA[Installed OR Not VersionNT64]]>
</Condition>
<?endif?>
票数 7
EN

Stack Overflow用户

发布于 2010-03-17 08:29:59

condition元素与windows installer属性一起使用,这些属性在安装过程中存在。

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

我会尝试这样做:

代码语言:javascript
复制
<?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“属性,并且该属性将在安装期间可用于条件元素中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2458550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档