我如何以编程方式获得另一个应用程序的安装path?

我想知道应用程序的安装path在哪里。 我知道它通常在… \ Program Files文件…但是我想有些人把它安装在不同的位置。 我知道应用程序的名称。

谢谢。

Solutions Collecting From Web of "我如何以编程方式获得另一个应用程序的安装path?"

找到程序的安装路径(在Windows上)的理想方法是从注册表中读取它。 大多数安装程序将为包含安装路径的程序创建一个注册表项。 确切地说,这个关键是什么,它的命名取决于有问题的程序。

要查找程序是否在注册表中有密钥,请打开“ regedit ”并使用“编辑”>“查找”选项尝试找到程序名称的密钥。 如果存在这样的密钥,可以使用.NET Framework库中的RegistryKey类来读取它。

如果程序没有注册表项,那么另外一个选项就是要求用户使用OpenFileDialog来定位.exe文件,虽然这显然不是很理想。

许多(大多数?)程序创建一个App Paths注册表项。 看一下

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 

如果您知道有问题的应用程序(与任何应用程序相比),注册表项可能是最好的选择(如果存在的话)。

安装程序可能会在某个地方放置自己的“安装路径密钥”(所以Fara提到的查找方式)或者它可能位于已安装程序的卸载部分,因此您可以检查:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载

但请注意,任何新版本的安装都可能会改变其写入的密钥,无论是自定义密钥还是卸载条目。 所以检查注册表可能只适用于已知的安装\版本。

TEP

最好的方法是使用安装程序API来查找程序位置。 你可以在API上编写一个托管包装器

搜索MsiGetProductInfo

参考: http : //msdn.microsoft.com/en-us/library/aa369558(VS.85).aspx

你可以使用MSI(我在这里为它写了一个C#包装器https://github.com/alialavia/MSINet )。 这是一个简单的例子:

 var location = ""; foreach (var p in InstalledProduct.Enumerate()) { try { if (p.InstalledProductName.Contains("AppName")) { location = p.InstallLocation; break; } } catch { } }