我有一個跨多個站點安裝的產品。現在我們發佈了升級。但問題是,在第一個版本中,安裝是針對每個用戶的,現在我們已經針對每臺機器進行安裝。在檢測到舊安裝(v2)時運行的新版本(v3)中存在自定義操作。但是,當msi以安裝版本2的其他用戶身份運行時,它不會被檢測爲已安裝。是否有方法檢測舊版本是否已安裝(即使它是由不同於當前用戶的用戶安裝的 ),可能在安裝腳本。如何檢查應用程序是否安裝(對於任何用戶),並使之升級而不是安裝?
回答
檢查兩個註冊表64/32已安裝的應用程序。在這些鍵下查找您的產品GUID。如果它在那裏,它已安裝。
這適用於微星安裝的東西。
32位: [HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微軟\的Windows \ CurrentVersion \卸載]
64位: [HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows \ CurrentVersion \卸載]
在安裝腳本中,我可以讀取此值。但是有沒有什麼辦法讓msi自動作爲升級版運行,即使對於其他用戶也檢測舊版本 – wintersolider
您必須配置MSI安裝程序以正確更新。這需要在InstallShield IDE左側樹的Media-> Upgrades節點中編寫。您可以指定要升級的版本。 –
既然你不不知道機器上可能有多少用戶,以及按照每臺機器或每個用戶安裝產品的人數,我認爲唯一透徹的方法是使用MsiGetProductInfoEx()或同等產品來爲所有用戶機。例如,我不知道您的具體情況,但是如果管理員代表安裝每臺計算機的新產品,那麼除非您找到實際安裝它的用戶,否則您將陷入困境。這不是一個好用的用戶管理員安裝!您需要枚舉所有用戶,獲取每個SID並詢問是否安裝了您的產品,並使用該API(或同等產品)。如果找到,您會告訴用戶以該用戶身份登錄並卸載該產品。 IIRC當另一個用戶(甚至管理員)試圖卸載其他用戶安裝的每個用戶產品時,它並不總是成功。
根據我的經驗,在大多數情況下,人們嘗試使用某種獨立於安裝上下文的檢測方法來檢測產品是否已安裝。然後,如果您的每臺計算機主要升級沒有設置說明它發現每臺機器安裝的屬性,只會引發錯誤並要求手動卸載。
注:添加自定義操作和二手:: MsiConfigureProduct()卸載和MsiGetProductInfoEx()檢查產品安裝
通過調查這樣的許多其他問題 http://stackoverflow.com/questions/15652821/how-to-change-from-per-user-to-all-user-installation 我開始知道,有這樣的沒有辦法使這作爲升級工作,所以我不得不去與手動覆蓋。 – wintersolider
我做了一個編輯可以解釋一些關於使用API來實現我的場景,即卸載舊版本(如果已經爲任何用戶安裝),然後繼續正常安裝 – wintersolider
- 1. 如何檢查用戶是否安裝了應用程序?
- 2. 如何檢查之前是否安裝了iPhone應用程序?
- 3. 如何安裝ARC而不安裝任何ARC應用程序
- 4. 檢查安裝時是否安裝了android應用程序
- 5. 如何使用Inno Setup安裝程序升級MSI安裝?
- 6. 如何根據升級代碼檢測應用程序是否安裝
- 7. 我如何知道用戶是「升級」還是「安裝」android應用程序?
- 8. 如何檢查應用程序是否已安裝或正在首次安裝
- 9. 檢測應用程序是否安裝?
- 10. Android應用程序如何強制清潔安裝而不是升級
- 11. 檢查用戶是否已安裝我的Facebook應用程序
- 12. 如何檢查應用程序是否已安裝?
- 13. 如何檢查應用程序是否提前安裝?
- 14. 如何我可以檢查是否安裝了應用程序
- 15. Vagrantfile如何檢查最終是否安裝並安裝?
- 16. 如何檢查設備上是否安裝了任何應用程序?
- 17. 如何檢測用戶是否在此之前安裝過此應用程序
- 18. 如何檢測安裝或升級的iOS應用程序?
- 19. 重新安裝Typo3而不是升級
- 20. 運行安裝程序或檢查程序是否安裝
- 21. 是否可以使用Talend安裝程序升級服務器應用程序?
- 22. 如何檢查QQ(tencent)應用程序是否安裝在Android上或不是以編程方式安裝?
- 23. 檢查應用程序是否安裝在配對設備中
- 24. 如何確定用戶是否安裝了iOS應用程序?
- 25. 如何檢查應用程序是否預裝或從Windows Phone marketplace安裝
- 26. 安裝jar檢查是否已安裝
- 27. 如何檢查應用程序之前已安裝或不
- 28. NullSoft安裝程序 - 升級應用程序時升級app.config
- 29. 如何檢查我的應用程序是否安裝在客戶機上?
- 30. 如何檢查是否使用Ant安裝了特定的Django應用程序?
有沒有把你放在了一些神器任何共享的地方(可以是文件或註冊表項),還是您依賴安裝程序本身設置的密鑰?另外,請明確每個版本是否爲InstallScript或InstallScript MSI安裝程序。 –
我可以調整安裝程序,以便msi檢測到舊版本已安裝並作爲更新運行 – wintersolider