2016-03-21 48 views
0

我已经创建了简单的msi,现在我想检查另一个应用程序是否安装在客户端计算机上,或者不是在msi运行之前。在msi运行之前检查另一个已安装的应用程序

因为我创建的应用程序具有另一个应用程序的依赖关系。如果我的应用程序必须在客户端机器上工作,那么该机器应该安装另一个应用程序。

假设a.exe对b.exe有依赖性。

我为a.exe创建了msi,当我在客户端机器上为a.exe运行msi时,此msi必须检测b.exe是否在客户端计算机上运行。如果没有则终止MSI isntallation

+0

如何创建安装程序,您是否使用visual studio包和部署项目? –

+0

是b.exe还使用基于MSI的安装程序进行部署? – yossiz74

+0

Yossiz74,是的。 –

回答

1

如果另一个应用程序是使用MSI安装,

您可以使用升级机制。

威克斯:

<Upgrade Id="<UpgradeCode of the another App>"> 
    <UpgradeVersion Property="PREVIOUSINSTALLEDAPP" /> 
</Upgrade> 

<Condition Message="Please Install another application"> 
    <![CDATA[PREVIOUSINSTALLEDAPP]]> 
</Condition> 

,并确保FindRelatedProducts LaunchConditions之前测序。

0

如果您使用了Visual Studio安装程序,那么您的选项有所限制。如果B的安装创建注册表项,则设置中的搜索目标机器可以搜索该密钥并将其用作启动条件。如果您有B的MSI,那么您可以使用Windows SDK工具包中的Orca打开它,并查看Component表并查找(比如说)安装的可执行文件的Component Guid。再次,可以在搜索目标机器中使用Windows Installer搜索和启动条件。

一般来说,这些检查在实际应用程序中比在安装中更好。您正在强制执行可能毫无意义的安装顺序,因为您的安装不依赖于B,只有您的应用程序。因此,允许任何安装顺序更友好,并将支票放入您的应用程序中,如果未安装,则需要B才能运行。如果用户卸载B这是否意味着您的应用程序将只会崩溃,因为唯一的检查是在安装时?

相关问题