我想知道应用程序的安装路径在哪里。我知道它通常在... \ Program Files ...但我想有些人会把它安装在不同的位置。我知道应用程序的名称。
谢谢。
答案 0 :(得分:12)
查找程序安装路径(在Windows上)的理想方法是从注册表中读取它。大多数安装程序将为包含安装路径的程序创建一个注册表项。这个密钥的确切位置以及它的名称取决于所讨论的程序。
要查找该程序是否在注册表中有密钥,请打开“regedit”并使用编辑>查找选项以尝试使用程序名称查找密钥。如果存在此类密钥,则可以使用.NET Framework库中的RegistryKey类来读取它。
如果程序没有注册表项,那么另一个选项就是要求用户使用OpenFileDialog找到.exe文件,尽管这显然不太理想。
答案 1 :(得分:10)
许多(大多数?)程序会创建一个App Paths
注册表项。看看
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
答案 2 :(得分:4)
如果您知道相关应用程序(与任何应用程序相比),则注册表项可能是最佳选项(如果存在)。
安装可能会在某处放置自己的自定义“安装路径密钥”(如Fara所提到的那样),或者它可能位于已安装程序的卸载部分中,因此您可以检查:
但请注意,任何新版本的安装都可能会更改它写出的密钥,包括自定义密钥或卸载条目。因此,检查注册表应该只适用于已知的install \ version。
TEP
答案 3 :(得分:3)
最好的方法是使用Installer API查找程序位置。 您可以通过API编写托管包装器
搜索MsiGetProductInfo
参考:http://msdn.microsoft.com/en-us/library/aa369558(VS.85).aspx
答案 4 :(得分:0)
你可以使用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 { }
}
答案 5 :(得分:0)
在注册表中查看。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
或
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
上面的每一个都包含一个子项列表,每个安装的应用程序都有一个子项(例如,在“程序和功能”小程序中显示)
您可以在此处搜索您的应用程序,或者如果您知道产品代码,则直接访问它。
public string GetInstallPath(string applicationName)
{
var installPath = FindApplicationPath(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", applicationName);
if (installPath == null)
{
installPath = FindApplicationPath(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", applicationName);
}
return installPath;
}
private string FindApplicationPath(string keyPath, string applicationName)
{
var hklm = Registry.LocalMachine;
var uninstall = hklm.OpenSubKey(keyPath);
foreach (var productSubKey in uninstall.GetSubKeyNames())
{
var product = uninstall.OpenSubKey(productSubKey);
var displayName = product.GetValue("DisplayName");
if (displayName != null && displayName.ToString() == applicationName)
{
return product.GetValue("InstallLocation").ToString();
}
}
return null;
}