當在Windows 7安裝程序(所有Windows版本將是真棒知道......但Windows 7將足以滿足現在)與MSI ...
- 什麼&到哪裏都是在變化中取得註冊表安裝以及所有這些更改如何相互關聯?
-I怎樣才能找到全部與給定安裝有關的數據我是否需要它,是否必須通過註冊表來獲取這些數據,或者是否有另一種更有效或更合適的方式來訪問數據?在Windows 7中安裝MSI時在註冊表中發生了什麼?
回答
我一直在玩註冊表和安裝,看看我能想出什麼。 如果任何人可以進一步闡述我的答案或作出任何更正,將不勝感激,因爲這個答案只來自觀察,而不是來自任何官方來源。我已經制作了一些表格來描述我在下面的圖片中看到的結果。此外,爲了訪問所需的信息(IE,MSI的ProductName或ProductCode屬性),我遇到了WIX(http://wixtoolset.org/),並使用Micrsoft.Deployment.Installer.dll以及WIX包含的其他庫,因爲它們很漂亮當甜。
我不知道所有密鑰的官方條款&我在這裏引用的代碼...所以不要感到驚訝,如果它看起來像我製作它們是因爲它們似乎指定,因爲我做到了。
更新:我剛剛發現在MSI文檔一些有用的信息,可能在這裏讚賞:http://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v=vs.85).aspx
使用MSI API,例如MsiGetProductInfoEx function。正如漢斯所言,註冊表數據大多是無證的,因爲它是一個實現細節。
使用MsiGetProductInfoEx(也可能是MsiEnumProductsEx)是推薦的編程方法獲取有關安裝產品的信息。使用這種方法,您可以比較對ProductCode,ProductVersion和包代碼(即版本號摘要屬性)值的更改。然而,對應用程序的小更新可能會使ProductCode和ProductVersion保持不變。一個典型的小型更新只會更改一個或兩個文件或一個註冊表項,在這種情況下,還應該更改軟件包代碼。但是,隨附語言轉換的產品可能與沒有轉換的產品具有相同的軟件包代碼。
如果您正在開發自己的Windows Installer軟件包,需要確定用戶是否已經安裝了該應用程序的某個版本,則可以使用Windows Installer服務在應用程序安裝期間搜索特定的文件或目錄。此方法需要在Windows安裝程序數據庫中填充相應的表,並且msi應運行AppSearch操作。這種方法在這裏描述的發佈微軟的Windows安裝程序文件中:
Searching for Existing Applications, Files, Registry Entries or .ini File Entries
- 1. 在Python中編輯Windows 7註冊表?
- 2. 在Windows 7中創建註冊表項
- 3. 在Windows 7註冊表中寫入
- 4. 選擇Windows「安裝更新並關閉」註銷選項時發生了什麼?
- 5. 在Windows安裝項目中註冊和取消註冊DLL
- 6. 如何從安裝了IE的Windows註冊表中查找?
- 7. Windows Server 2008/Windows 7 MSI文件/註冊表失敗(x64)
- 8. 瞭解Windows 7的註冊表C#
- 9. 在BizTalk中,爲什麼導入並安裝了MSI文件?
- 10. Windows安裝程序日誌顯示註冊表項添加,但在註冊表中不存在安裝
- 11. 在Windows 7安裝過程中,WiX不會添加HKLM註冊表設置
- 12. 在windows中安裝QJson - 7
- 13. 在Windows 7中安裝Node.exe
- 14. QT-在Windows 7中安裝
- 15. 我在Windows 7上安裝maven失敗。我做錯了什麼?
- 16. 使用c#msi安裝程序安裝時未創建註冊表鍵
- 17. 什麼是Windows註冊表?
- 18. 如何在Windows註冊表中檢測用戶是否安裝了.Net Framework?
- 19. 在Windows Server 2012中安裝程序註冊表訪問
- 20. COM註冊的DLL不會生成MSI安裝程序的註冊類型庫
- 21. 安裝項目沒有在註冊表中註冊
- 22. 安裝到GAC並在註冊表中註冊
- 23. 無法在MSI安裝程序的自定義操作中寫入註冊表
- 24. 刪除註冊表項 - 發生了什麼
- 25. 調解員註冊時發生了什麼事件?
- 26. MVVMLight SimpleIoc多次註冊時發生了什麼?
- 27. 在Windows 7上使用Python安裝Robot Framework時發生錯誤
- 28. 在Windows 7上安裝sails-mongo時發生致命錯誤
- 29. Windows註冊表問題安裝bugzilla
- 30. 註冊表項在Windows 7 64位
這是微星的實現細節。它維護密鑰,以便它可以正確地重新安裝,更新和卸載應用程序。哪一個問題很重要,爲什麼這對你很重要?只是好奇心,還是你想解決一個實際問題?如果您好奇,可以使用SysInternals的ProcMon實用程序觀察正在讀取和寫入的密鑰。 –
@HansPassant我的理由是我需要找出是否安裝了應用程序以及安裝的應用程序的版本是什麼。另一個原因是一般的好奇心和未來的參考...因此,我不只問如何找到當前安裝的版本。 – bsara
你只能找到微星知道的數據,而不是'全部'數據。任何自定義操作,MSI不知道更改 - 您只能通過監視更改或向開發人員查找。他們正在爲MSI「外」。鮑勃斯回答最好'微星知道什麼' – saschabeaumont