我想以编程方式找到基于MSI的安装的安装位置。该应用程序不会在注册表中的卸载密钥中输入Install Location。应用程序不会填充ARPINSTALLLOCATION属性。 (这与添加/删除程序引用的值相同,并存储在卸载密钥中)。但是,卸载仍然可以找到它所在的位置并可以将其卸载。这些信息存储在哪里? Windows使用缓存的MSI安装程序卸载应用程序,但安装时首次确定安装位置,因此此信息不是安装程序包的一部分。
答案 0 :(得分:2)
我假设当你说“安装位置”时,你的意思是“应用程序的EXE位于哪个目录?”否则,问题是不明确的,因为MSI不一定要安装“应用程序”。它可以安装没有EXE的组件。它可以在多个目录中安装......
但这可能会奏效:
致电MsiGetProductInfo以获取ARPINSTALLLOCATION。您需要知道安装的“产品名称”。作为第一个参数。如果需要,请致电MsiEnumProducts枚举所有已安装的“产品”
答案 1 :(得分: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
了解有关安装程序对象的更多信息