2011-01-31 81 views
3

我想要以編程方式查找基於MSI的安裝的安裝位置。該應用程序不會在註冊表中的卸載密鑰中輸入「安裝位置」。應用程序不會填充ARPINSTALLLOCATION屬性。 (這與「添加/刪除程序」引用的值相同,並存儲在「卸載」鍵中)。不過,卸載仍然可以找到它的位置,並可以卸載它。這些信息存儲在哪裏? Windows使用緩存的MSI安裝程序來卸載應用程序,但安裝位置是在安裝時第一次確定的,因此此信息不是安裝程序包的一部分。如何以編程方式在Windows中查找安裝的應用程序的安裝位置

回答

2

我假設你說「安裝位置」時,你的意思是「應用程序EXE位於什麼目錄?」否則,這個問題是不明確的,因爲MSI不一定需要安裝「應用程序」。它可以安裝沒有EXE的組件。它可以在多個目錄中安裝...

但是,這可能會工作:

呼叫MsiGetProductInfo得到ARPINSTALLLOCATION。您需要知道安裝的「產品名稱」。作爲第一參數。呼叫MsiEnumProducts如果需要

+2

與此相關的安裝程序對象,當你知道它是一個.msi並且可以在其中找到一個組件時,你可以使用MsiGetComponentPath(或MsiLocateComponent)來定位它的keypath。這可能是正確組件的exe。 –

+0

@邁克爾,這是最終爲我工作的。 –

2

下面是一個使用了WindowsInstaller.Installer COM接口一個VBScript版本枚舉所有已安裝的「產品」:

Dim installer 
Set installer = CreateObject("WindowsInstaller.Installer") 
Dim productCode, productName 
For Each productCode In installer.Products 
    WScript.Echo "ProductCode: " & productCode 
    WScript.Echo "ProductName: " & installer.ProductInfo(productCode, "ProductName") 
    WScript.Echo "InstallLocation: " & installer.ProductInfo(productCode, "InstallLocation") 
    WScript.Echo "LocalPackage: " & installer.ProductInfo(productCode, "LocalPackage") 
Next 

瞭解更多關於http://msdn.microsoft.com/en-us/library/windows/desktop/aa369432(v=vs.85).aspx#methods

相關問題