2016-03-21 50 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這是否意味着您的應用程序將只會崩潰,因爲唯一的檢查是在安裝時?

相關問題