如何使用C#检查安装程序的位置
我需要按程序名称(添加或删除程序中显示的名称)检查程序的安装位置。 什么是最好的方法,以便它适用于所有语言。
看一下注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
只需迭代所有子键,然后查看值DisplayName和InstallLocation 。 在这里你可以找到你想要的信息以及更多;-)
为了增加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(); }