2009-09-22 6 views
6

मुझे यह जांचने की आवश्यकता है कि प्रोग्राम नाम से प्रोग्राम कहां स्थापित किया गया है (नाम जो प्रोग्राम जोड़ें या निकालें) में दिखाई देता है। इसका सबसे अच्छा तरीका क्या है कि यह सभी भाषाओं के लिए ठीक काम करेगा।सी # के साथ कैसे जांचें जहां एक प्रोग्राम स्थापित किया गया है

+0

??? क्या आप अपना प्रश्न स्पष्ट कर सकते हैं? क्या आप पूछ रहे हैं कि कोई प्रोग्राम नेट आधारित है, या कुछ और? – Graviton

+0

रजिस्ट्री की जांच करें। – RaYell

उत्तर

12

बस सब उपकुँजियाँ से अधिक पुनरावृति

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

पर रजिस्ट्री में एक नज़र डालें और मूल्यों DisplayName और installLocation में एक बार देख ले। यहां आपको वह इंफोस मिलेगा जो आप चाहते हैं और बहुत कुछ ;-)

+0

कम से कम इंस्टॉललोकेशन कथा का कार्य हो सकता है; उदाहरण के लिए, क्रिस्टल 11 के लिए रजिस्ट्री के अनुसार, InstallLocation "सी: \ प्रोग्राम फ़ाइलें \ आपकी कंपनी का नाम \ आपका उत्पाद नाम \" है। कई मामलों में, यह सेट नहीं है, या तो। –

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

करना है इन कड़ियों पर एक नज़र डालें

Using Windows Installer to Inventory Products and Patches

और

MsiGetProductInfoEx Function

+0

MsiGetProductInfo ने सी # में मेरे लिए अच्छा काम किया। फ़ंक्शन का उपयोग करने के लिए पिनवोक (http://www.pinvoke.net/default.aspx/msi.msigetproductinfo) का उपयोग करें। –

+0

यदि आप PInvoke का उपयोग करने से बचना चाहते हैं तो मुझे लगता है कि यह जानकारी वाईएक्स के एक हिस्से पर डिप्लॉयमेंट टूल्स फाउंडेशन (डीटीएफ) के माध्यम से प्राप्त की जा सकती है। http://robmensching.com/blog/posts/2008/5/16/deployment-tools-foundation-joins-the-wix-toolset – RenniePet

8

ओलिवर के उत्तर में जोड़ने के लिए मैंने इस चेक को एक स्थिर विधि के अंदर लपेट लिया है।

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; 
} 
संबंधित मुद्दे