Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止Wix安装旧版本?_Wix_Windows Installer_Major Upgrade - Fatal编程技术网

如何防止Wix安装旧版本?

如何防止Wix安装旧版本?,wix,windows-installer,major-upgrade,Wix,Windows Installer,Major Upgrade,我有一个应用程序,我们正在切换到WiX安装程序。到目前为止,几乎一切都进展顺利。我遇到的一个问题是,如果下载并尝试安装旧版本,它就会这样做 这是一个小问题。如果安装了较新的版本,我不希望它安装较旧的版本。我原以为问题出在“升级”组件上,但我必须承认我遇到了麻烦。我如何更改它,以便旧版本看到已经安装了新版本而没有安装它 我的测试产品现在是2.4版(我们正在努力推出的最新版本)。它可以正确升级到2.4.1或2.5或3.0。但是如果我制作了一个3.0版本,然后运行2.4版的msi,它仍然会添加它 我的

我有一个应用程序,我们正在切换到WiX安装程序。到目前为止,几乎一切都进展顺利。我遇到的一个问题是,如果下载并尝试安装旧版本,它就会这样做

这是一个小问题。如果安装了较新的版本,我不希望它安装较旧的版本。我原以为问题出在“升级”组件上,但我必须承认我遇到了麻烦。我如何更改它,以便旧版本看到已经安装了新版本而没有安装它

我的测试产品现在是2.4版(我们正在努力推出的最新版本)。它可以正确升级到2.4.1或2.5或3.0。但是如果我制作了一个3.0版本,然后运行2.4版的msi,它仍然会添加它

我的升级组件:

<Upgrade Id="PUT-GUID-HERE">
  <UpgradeVersion Maximum="2.4" Property="PREVIOUSVERSIONSINSTALLED" />
  <UpgradeVersion Minimum="1.0" Property="NEWERPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="no" />
</Upgrade>

跟进:
按照斯坦斯的建议,我犯了这样一个错误
“找到重复符号'WixAction:InstallExecuteSequence/RemoveExistingProducts'”
在查看了
下的Product.wxs文件后,我不得不删除
,因为这是它所指的副本。安装后,安装程序工作正常,旧版本无法再安装在新版本之上。

旧版本的软件包:您无法更改软件包的旧版本以检测新版本。您需要从一开始就在包中构建保护<代码>包需要预先认知。这是一个行业问题。

现代:您上面展示的WiX元素都是“旧式”。这里描述了一个新的“便利功能”:它涉及“新”。这项新功能具有一些自动魔法,我相信它添加了您默认描述的保护(降级保护)。因此,您可以切换到使用它。我会先试试。让我内联基本标记:

<MajorUpgrade Schedule="afterInstallInitialize" 
              DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." 
              AllowDowngrades="no" AllowSameVersionUpgrades="no" />

解耦:如果您发现人们运行旧版本并干扰最新应用程序的风险很高,您可以为最新版本设置新的安装位置和新的升级代码,并排安装以解耦新旧产品

并排:要实现这一点,您的产品必须能够和平共存,而不是为了文件关联、每台机器注册的COM服务器或其他使产品相互干扰的全球共享数据而争吵。这是否可能取决于您的应用程序。无法从两个不同的位置注册全局共享COM服务器-如果您使用常规注册表注册(您可以使用基于清单的reg free COM-尽管这有时会涉及)。在您的应用程序支持并行安装之前,可能需要克服许多挑战,或者,如果您的包很简单,不涉及注册表,那么这可能非常简单


组件guid:除了上面提到的升级代码更改之外,您还需要为所有组件设置新的组件guid,以便真正使产品相互隔离。如果你使用它,它会神奇地自动发生。这里试图解释您需要新组件GUID的原因:实际上,GUID引用计算的是绝对安装位置,而不是文件本身。如果安装到新位置,则需要新的组件GUID。

是的,我应该指出这一点。MajorUpgrade元素添加了不应该重复的内容。对于其他问题,也有一些这样的怪癖需要注意。如果我现在能想到他们。我想我应该更新答案。。。更新。
<RemoveExistingProducts Sequence="6550" />