2009-09-22 27 views
6

我需要通過程序名稱(出現在「添加或刪除程序」中的名稱)來檢查程序的安裝位置。什麼是最好的方式,以便它適用於所有語言。如何使用C#檢查程序的安裝位置

+0

???你能指出你的問題更清楚嗎?你問一個程序是基於.Net還是其他的? – Graviton 2009-09-22 06:52:05

+0

檢查註冊表。 – RaYell 2009-09-22 06:57:14

回答

12

看看進入註冊表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

只是遍歷所有子項和看一看到值顯示名稱INSTALLLOCATION。在這裏你可以找到你想要的信息以及更多信息;-)

+0

至少InstallLocation可以是一個小說的作品;例如,根據註冊表,Crystal 11的InstallLocation爲「C:\ Program Files \ Your Company Name \ Your Product Name \」。在很多情況下,它也沒有設置。 – 2009-09-22 08:06:59

0

您可以使用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(); 
      } 
4
+0

MsiGetProductInfo在C#中爲我工作得很好。使用pinvoke(http://www.pinvoke.net/default.aspx/msi.msigetproductinfo)來使用該函數。 – 2012-10-01 15:09:58

+0

如果您想避免使用PInvoke,我認爲這些信息可以通過部署工具基礎(DTF)(WiX的一部分)獲得。 http://robmensching.com/blog/posts/2008/5/16/deployment-tools-foundation-joins-the-wix-toolset – RenniePet 2013-06-24 15:39:03

8

要添加到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; 
} 
相關問題