2016-04-26 66 views
0

無論何時我們安裝軟件,Windows操作系統都會在C:\ Windows \ Installer \位置保留安裝程序* .msi的備份副本。查找/預測* .msi文件安裝位置閱讀* .msi數據庫

所以,我通過目前所有MSI文件在迭代「C:\ WINDOWS \安裝程序\」

我要準備一個映射列表,列表將有* .msi文件,其默認位置。

假設C:\ Windows \ Installer [某些產品密鑰] \ 123xR23.msi 考慮「123xR23.msi」是WinZip安裝的備份文件。並安裝有位置在 「C:\ Program Files文件(x86)的\ WinZip的」 安裝WinZip的

所以列表將有以下條目 「123xR23.msi」, 「C:\ Program Files文件(x86)的\ WinZip的」

請幫幫我。

謝謝

+0

你可以找到備份.msi,但你找不到或者安裝或沒有...例如備份msi文件名ABC.msi但安裝程序安裝,作爲XYZ.msi因爲用戶更改路徑以及安裝目錄以及EXE名稱...所以它是不可能找到完美的位置 – 2016-04-26 12:58:09

+0

嗨普拉那我們無法知道用戶在安裝時給出的確切路徑。所以我只是想知道如果用戶沒有更改默認值的情況下的預測。 – Wrox

+0

如果你想預測然後使用安裝程序的名稱,並在程序文件中找到文件夾,並嘗試匹配相同的 – 2016-04-26 13:25:56

回答

0

首先,爲什麼你甚至需要這個?

有這些映射*的.msi文件已經存在在HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Installer程序\的UserData \\ \\產品的InstallerProperties然後註冊表的MSI值LocalPackage

S-1-5-18是本地系統的安全ID。

ProductGUID在這裏也有點奇怪。在您的安裝程序,你會看到類似

2F7DBBE6-8EBC-495C-9041-46A772F4E311 

但在註冊表路徑GUID的產品看起來像這樣

6EBBD7F2CBE8C5940914647A274F3E11 

肯定有一個原因,但我不知道它是什麼。在註冊表中查找時,您只需將產品GUID轉換爲其他表示。

還有一個叫做InstallLocation的註冊表鍵,它應該包含msi軟件包的安裝位置。但這並不總是如此。也許安裝目錄存儲在註冊表中的其他地方,我不知道你可能要四處看看。


編輯:看起來像的每個組件的安裝變得由GUID在註冊表中的項以及包含它被安裝到的路徑。這可以幫助您找到特定MSI的安裝位置,如果它未在上述InstallLocation下列出。每個Micheal的評論,我會建議利用與Msi相關的功能()

+0

你說得對。我有註冊表中的軟件和卸載程序位置/卸載程序路徑列表。我想預測如果用戶使用默認設置安裝了哪個軟件,哪裏安裝。例如WinZip軟件安裝的可能位置將是「C:\ Program File \ WinZip」或「C:\ Program File(86)\ WinZip」我想從.msi列出所有軟件及其可能的安裝路徑。 (爲此我們可以使用Orca查詢或讀取* .msi。)我無法從那裏預測它。 – Wrox

+0

爲什麼要通過註冊表來壓縮GUID和通過註冊表進行拖拽時,如果有完美的方法來使用C++進行枚舉(請參閱MsiEnumProducts/Ex和MsiGetProductInfo)或[C#](http://stackoverflow.com/questions/3526449/how-to - 獲得-A-列表中安裝的軟件產品)? –

+0

@Micheal因爲我不知道這些方法存在=]這是有道理的,有一些窗口API來發現這個東西。如果您認爲這是解決此問題的最佳解決方案,請考慮編寫答案。 –