我的經理給了我安裝msi的機器的配置文件列表。從已安裝的文件中,如何查找哪個msi將安裝該文件?
他讓我找出他們來自哪個msi。 (因爲我們需要爲該msi編寫一些邏輯)。
如何查找這些文件來自哪個msi?
手動打開orca並搜索它很困難,因爲msi的數量更多。
有沒有其他的替代方法?我們使用Wix創建msi。
我的經理給了我安裝msi的機器的配置文件列表。從已安裝的文件中,如何查找哪個msi將安裝該文件?
他讓我找出他們來自哪個msi。 (因爲我們需要爲該msi編寫一些邏輯)。
如何查找這些文件來自哪個msi?
手動打開orca並搜索它很困難,因爲msi的數量更多。
有沒有其他的替代方法?我們使用Wix創建msi。
我會得到.config文件的MD5哈希值,然後查詢.msis中的MsiFileHash表,直到找到匹配的哈希值。
不能保證MSI安裝了該文件。我已經用了很多這就是說,一個快速的手段是MS-DOS命令FINDSTR
在與配置文件安裝到計算機:
CD %WINDIR%\Installer
FINDSTR -i -m dark.exe *.msi *.msi
這會是一個不區分大小寫在所有的MSI文件的字符串dark.exe。然後使用ORCA檢查產生的MSI以查看命中是否準確以及它是什麼產品。提醒:MSI名稱將是一些短的十六進制哈希,因爲這些是已刪除/緩存的MSI,而不是原始的MSI。
如果您可以在機器上運行代碼,那麼使用Windows Installer API的實用程序將爲您提供答案。這些工具很容易用VC++編寫。
Windows Installer API的起點是MsiEnumComponents,它將爲您提供系統上安裝的每個組件的組件代碼。從那裏,MsiEnumClients
將爲您提供包含特定組件的每種產品的產品代碼。然後,您可以使用MsiGetComponentPath
獲取組件的路徑。如果是您感興趣的路徑,請使用MsiGetProductInfoEx瞭解安裝它的產品,例如INSTALLPROPERTY_INSTALLSOURCE
和INSTALLPROPERTY_PACKAGENAME.
聽起來很複雜,但事實並非如此。
很遺憾MSI沒有像RPM(rpm -qf)這樣的功能。 – 2013-03-26 20:05:25