我有一个应用程序在公司的几百台计算机上使用,我必须修改应用程序安装目录中的INI文件。用户可以随意安装应用程序,并且可以在任何给定时间安装多个版本的应用程序。我需要能够找到该安装目录。
到目前为止我考虑过的方法:
好的,让我们听一下其他方法,以编程方式确定Windows应用程序的安装目录。
答案 0 :(得分:7)
我想出了一个适合我的解决方案:
Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
Installer msi = (Installer)Activator.CreateInstance(type);
foreach (string productcode in msi.Products)
{
string productname = msi.get_ProductInfo(productcode, "InstalledProductName");
if (productname.Contains("<APPLICATION NAME>"))
{
string installdir = msi.get_ProductInfo(productcode, "InstallLocation");
}
}
答案 1 :(得分:2)
使用WMI可能适用于某些人,遗憾的是我们的用户将无法获得凭据,允许他们在自己的计算机上执行此操作:
ManagementObjectSearcher search = new ManagementObjectSearcher("Select InstallationLocation from Win32_Product");
ManagementObjectCollection results = search.Get();
foreach (ManagementObject mo in results)
{
Console.WriteLine(mo["InstallLocation"]);
}
答案 2 :(得分:1)
如果安装是MSI,那么从WMI获取信息是微不足道的。 Win32_Product类具有InstallLocation属性来保存此信息。