我想以编程方式查找基于MSI的安装的安装位置。 该应用程序不会在registry中的卸载项中input“安装位置”。 应用程序不会填充ARPINSTALLLOCATION属性。 (这与“添加/删除程序”引用的值相同,并存储在“卸载”键中)。 但是,卸载仍然可以find它的位置,并可以卸载它。 这些信息在哪里存储? Windows使用caching的MSI安装程序来卸载应用程序,但安装位置是在安装时第一次确定的,因此这些信息不是安装程序包的一部分。
我假定当你说“安装位置”时,你的意思是“应用程序EXE位于什么目录? 否则,这个问题是不明确的,因为MSI不一定要安装一个“应用程序”。 它可以安装一个没有EXE的组件。 它可以安装在多个目录中…
但是这可能会起作用:
调用MsiGetProductInfo来获取ARPINSTALLLOCATION。 您将需要知道它所安装的“产品名称”。 作为第一个参数。 调用MsiEnumProducts来枚举所有安装的“产品”,如果需要的话
这是使用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查找有关安装程序对象的更多信息