如何使用C#检查安装程序的位置

我需要按程序名称(添加或删除程序中显示的名称)检查程序的安装位置。 什么是最好的方法,以便它适用于所有语言。

看一下注册表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

只需迭代所有子键,然后查看值DisplayNameInstallLocation 。 在这里你可以找到你想要的信息以及更多;-)

为了增加Oliver的答案,我在静态方法中包含了这个检查。

 public static bool IsProgramInstalled(string programDisplayName) { Console.WriteLine(string.Format("Checking install status of: {0}", programDisplayName)); foreach (var item in Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall").GetSubKeyNames()) { object programName = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + item).GetValue("DisplayName"); Console.WriteLine(programName); if (string.Equals(programName, programDisplayName)) { Console.WriteLine("Install status: INSTALLED"); return true; } } Console.WriteLine("Install status: NOT INSTALLED"); return false; } 

看看这些链接

使用Windows Installer清点产品和修补程序

MsiGetProductInfoEx函数

您可以使用WMI类来实现此目的。 但前提条件是

  • 应用程序,必须运行

在示例代码下方执行此操作

  string queryString = "SELECT Name, ProcessId, Caption, ExecutablePath" + " FROM Win32_Process"; SelectQuery query = new SelectQuery(queryString); ManagementScope scope = new System.Management.ManagementScope(@"\\.\root\CIMV2"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection processes = searcher.Get(); foreach(ManagementObject mObj in processes) { var name = mObj ["Name"].ToString(); var ProcessId = Convert.ToInt32(mObj ["ProcessId"]); var Caption = mObj ["Caption"].ToString(); var Path = mObj ["ExecutablePath"].ToString(); }