如何避免使用MSI安装程序对同一产品进行多次安装/修复

我想为我的应用程序创build一个MSI安装程序,并且还需要通过活动目录软件部署来远程部署此应用程序。 我还需要确保这个应用程序没有安装多次,不应该允许任何修复或修改。 为了确保这件事我已经在我的安装程序中做了ARPNOREPAIR = 1 。 这工作正常,如果我尝试手动或甚至静默安装多个实例。 但是我正在使用活动目录进行操作时遇到问题。 它总是允许多个安装导致安装状态的损坏。 我想有任何方法可以确保应用程序的多个实例不会安装,即使版本不同。

谢谢

阻止所有版本的.msi软件包被安装的最简单的方法是使用UpgradeCode提供的信息。 您可以通过添加以下内容(使用WiX工具集语法)来了解其他版本的相关软件包:

 <Upgrade Id='PUT-UPGRADE-CODE-HERE'> <UpgradeVersion OnlyDetect='yes' Property='FOUND_RELATED_PACAKGE' /> </Upgrade> 

这会将名为FOUND_RELATED_PACKAGE的属性设置为已安装包中的ProductCodes列表。 那么你可以像这样阻止安装(使用WiX工具集语法):

 <Condition Message='Another version of [ProductName] is already installed."> Installed OR NOT FOUND_RELATED_PACAKGE </Condition> 

最后,阻止修复.msi包是非常危险的。 有很多情况(包括小的升级和修补),取决于维修工作的一个包。 要让你的安装包具有恢复能力是很好的,因为它是如何工作的基础。

祝你好运!