2010-12-17 14 views
45

में एक रजिस्ट्री कुंजी पढ़ना मैंने एक एप्लीकेशन विकसित किया है और इसे क्लाइंट कंप्यूटर पर स्थापित किया है। मेरे आवेदन में मुझे अपना इंस्टॉलेशन पथ प्राप्त करने की आवश्यकता है।सी #

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath] 

मैं कैसे सी # का उपयोग कर AppPath पढ़ सकते हैं: मेरा आवेदन पर एक रजिस्ट्री प्रविष्टि है?

+1

माइक्रोसॉफ्ट की शब्दावली का उपयोग करके, आपके प्रश्न में, 'MyAplication' एक * कुंजी * और 'AppPath' एक * मान * है।आप जो पूछ रहे हैं वह है कि 'ऐपपाथ' से जुड़े * डेटा * को कैसे प्राप्त करें। – DavidRR

उत्तर

24

इस http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C

अपडेट किया गया देखें:

आप Microsoft.Win32 नेमस्पेस के अंतर्गत RegistryKey वर्ग का उपयोग कर सकते हैं।

RegistryKey से कुछ महत्वपूर्ण कार्य इस प्रकार हैं:

GetValue  //to get value of a key 
SetValue  //to set value to a key 
DeleteValue //to delete value of a key 
OpenSubKey  //to read value of a subkey (read-only) 
CreateSubKey //to create new or edit value to a subkey 
DeleteSubKey //to delete a subkey 
GetValueKind //to retrieve the datatype of registry key 
+0

इसके बजाय [लिंक] (http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C) का उपयोग करें। – shipr

70
string InstallPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\AppPath", "Installed", null);  
if (InstallPath != null) 
{ 
    // Do stuff 
} 

कि कोड अपने मूल्य मिलना चाहिए। आपको

using Microsoft.Win32; 

हालांकि काम करने के लिए इसकी आवश्यकता होगी।

7

आप जहां रजिस्ट्री सोचता है कि इसके इंस्टॉल हो पाने के लिए निम्न का उपयोग कर सकते हैं:

(string)Registry.LocalMachine.GetValue(@"SOFTWARE\MyApplication\AppPath", 
    "Installed", null); 

या आप जहां आवेदन वास्तव में से शुरू किया जा रहा है पता लगाने के लिए निम्नलिखित का उपयोग कर सकते हैं:

System.Windows.Forms.Application.StartupPath 

उत्तरार्द्ध पूर्व की तुलना में अधिक विश्वसनीय है यदि आप .exe स्थान को संबंधित फ़ाइलों को ढूंढने के सापेक्ष पथ के रूप में उपयोग करने का प्रयास कर रहे हैं। उपयोगकर्ता इंस्टॉल करने के बाद आसानी से चीजों को स्थानांतरित कर सकता है और अभी भी ऐप ठीक काम कर रहा है क्योंकि .NET ऐप्स रजिस्ट्री पर इतना निर्भर नहीं हैं।

StartupPath का उपयोग करके, आप कुछ चालाक भी कर सकते हैं जैसे कि आपका ऐप गायब/गलत/दूषित प्रविष्टियों के कारण दुर्भाग्य से दुर्घटनाग्रस्त होने की बजाय रन टाइम पर रजिस्ट्री प्रविष्टियों को अपडेट करता है।

और रजिस्ट्री (Properties.Settings.Default.mySettingEtc) के बजाय मूल्यों के संग्रहण के रूप में ऐप सेटिंग्स कार्यक्षमता को देखना सुनिश्चित करें। आप ऐप और/या उपयोगकर्ता स्तरों के लिए सेटिंग्स को पढ़/लिख सकते हैं जो मानक स्थानों में सरल MyApp.exe.config फ़ाइलों के रूप में सहेजे जाते हैं। अतीत (अच्छा पुराना विन 3.1/डॉस दिन) से एक अच्छा विस्फोट करने के लिए एप्लिकेशन को इंस्टॉल/डिलीट करने के लिए एक फ़ोल्डर की संरचना की एक साधारण प्रतिलिपि/हटाएं या कुछ ठोस, आर्केन इंस्टॉल/अनइंस्टॉल दिनचर्या के बजाय हटाएं जो सभी प्रकार के कचरे को छोड़ देता है रजिस्ट्री में और सभी हार्ड ड्राइव छिड़क दिया।

+0

एक ही नस में, यह प्रयास में उपयोगी हो सकता है: 'पर्यावरण। कमांडलाइन 'और' पर्यावरण। गेटकॉमैंडलाइन आर्ट्स() ' –

+1

यह भी काम करता है: System.AppDomain.CurrentDomain.BaseDirectory –

+0

सिस्टम का उपयोग। रिफ्लेक्शन: असेंबली। गेटएक्सिंगिंगएस्प्लोरस() लेटर को पूरा पथ चुनने के लिए पूर्ण पथ प्राप्त होगा, फिर System.IO.Path.GetDirectoryName। –

5

यदि आप इसे किसी विशिष्ट प्रकार पर डालना चाहते हैं तो आप इस विधि का उपयोग कर सकते हैं। अधिकांश गैर-आदिम प्रकार डिफ़ॉल्ट रूप से सीधे कास्टिंग का समर्थन नहीं करेंगे, इसलिए आपको तदनुसार उनको संभालना होगा।

public T GetValue<T>(string registryKeyPath, string value, T defaultValue = default(T)) 
    { 
    T retVal = default(T); 

     retVal = (T)Registry.GetValue(registryKeyPath, value, defaultValue); 

     return retVal; 
    } 
+0

यह अच्छी तरह से काम करता है। उदाहरण उपयोग: 'int loopback = GetValue (@" HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa ", @" अक्षम LoopbackCheck ", -1);'। – Contango

1

माइक्रोसॉफ्ट.Win32 का उपयोग कर;

string chkRegVC = "NO"; 
    private void checkReg_vcredist() { 

     string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
     using (Microsoft.Win32.RegistryKey uninstallKey = Registry.LocalMachine.OpenSubKey(regKey)) 
     { 
      if (uninstallKey != null) 
      { 
       string[] productKeys = uninstallKey.GetSubKeyNames(); 
       foreach (var keyName in productKeys) 
       { 

        if (keyName == "{196BB40D-1578-3D01-B289-BEFC77A11A1E}" ||//Visual C++ 2010 Redistributable Package (x86) 
         keyName == "{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}" ||//Visual C++ 2010 Redistributable Package (x64) 
         keyName == "{C1A35166-4301-38E9-BA67-02823AD72A1B}" ||//Visual C++ 2010 Redistributable Package (ia64) 
         keyName == "{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}" ||//Visual C++ 2010 SP1 Redistributable Package (x86) 
         keyName == "{1D8E6291-B0D5-35EC-8441-6616F567A0F7}" ||//Visual C++ 2010 SP1 Redistributable Package (x64) 
         keyName == "{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}" //Visual C++ 2010 SP1 Redistributable Package (ia64) 
         ) { chkRegVC = "OK"; break; } 
        else { chkRegVC = "NO"; } 
       } 
      } 
     } 
    }