2012-05-03 49 views
3

我正在爲之前使用ClickOnce部署的應用程序編寫一個WiX安裝程序。如何檢測通過ClickOnce使用WiX安裝的應用程序?

我想檢測應用程序是否安裝在客戶端計算機上並中止MSI安裝。我搜索堆棧 溢出的類似問題,但我找不到一種方法來做到這一點。

如果我能找到一個路徑或某個註冊表項,告訴我應用程序的安裝位置,我可以通過條件中止MSI安裝。

使用this question的答案,我能夠找到某個地方。 ClickOnce快捷方式是.appref-ms擴展名的文件。這是我使用的代碼:

<Property Id="APP_CLICKONCE_INSTALLED"> 
    <DirectorySearch Id="dirSearch.APP.CLICKONCE" AssignToProperty="yes" Path="[StartMenuFolder]" Depth="2"> 
    <FileSearch Id="fileSearch.APP.CLICKONCE" Name="APP.appref-ms" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="App is already installed. Please uninstall it then re-run this setup."> 
    <![CDATA[APP_CLICKONCE_INSTALLED = "" OR INSTALLED]]> 
</Condition> 

然而,StartMenuFolder給出AllUsers的輪廓的位置,而點擊,一旦應用程序被安裝爲當前用戶。我仍在挖掘。

使用每用戶安裝StartMenuFolder給當前用戶的位置(我用的是perMachine):

<Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" /> 

現在一切都很好。

回答

2

我不知道維克斯什麼,但另一種方式來判斷是否安裝了ClickOnce應用程序是通過在註冊表中的卸載字符串,這在這裏重複:

HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall 

你會想搜索應用程序的產品名稱與該組鍵的顯示名稱相匹配的名稱。

+0

您是對的,ClickOnce安裝程序將一個條目插入卸載位置(與任何其他Windows安裝程序一樣)。鍵是不同的,但我可以依靠DisplayName來查找我的應用程序。 –

相關問題