2009-09-22 32 views
6

Tôi cần kiểm tra vị trí chương trình được cài đặt theo tên chương trình (tên xuất hiện trong Thêm hoặc loại bỏ chương trình). Cách tốt nhất để làm điều đó là tốt cho tất cả các ngôn ngữ.Cách kiểm tra bằng C# nơi chương trình được cài đặt

+0

??? Bạn có thể chỉ định câu hỏi của mình rõ ràng hơn không? Bạn đang hỏi liệu một chương trình là .Net dựa, hoặc cái gì khác? – Graviton

+0

Kiểm tra sổ đăng ký. – RaYell

Trả lời

12

Hãy xem vào registry tại

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

Chỉ cần lặp qua tất cả các subkeys và hãy nhìn vào giá trị DisplayNameInstallLocation. Ở đây bạn sẽ tìm thấy các infos bạn muốn và nhiều hơn nữa ;-)

+0

Ít nhất InstallLocation có thể là một tác phẩm hư cấu; ví dụ, InstallLocation, theo đăng ký, cho Crystal 11 là "C: \ Program Files \ Tên công ty \ Your Product Name \". Trong nhiều trường hợp, nó cũng không được thiết lập. –

0

Bạn có thể đạt được điều này bằng cách sử dụng Lớp WMI. Tuy nhiên, điều kiện tiên quyết là

  • ứng dụng và phải chạy

dưới mẫu mã để làm điều này

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 hoạt động tốt với tôi trong C#. Sử dụng pinvoke (http://www.pinvoke.net/default.aspx/msi.msigetproductinfo) để sử dụng chức năng. –

+0

Nếu bạn muốn tránh sử dụng PInvoke, tôi nghĩ rằng thông tin này có thể được nhận thông qua Deployment Tools Foundation (DTF), một phần của WiX. http://robmensching.com/blog/posts/2008/5/16/deployment-tools-foundation-joins-the-wix-toolset – RenniePet

8

Để thêm vào câu trả lời của Oliver, tôi đã bao bọc kiểm tra này bên trong một phương pháp tĩnh.

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; 
} 
Các vấn đề liên quan