2010-01-31 9 views
26

सी # Winforms - मैं रजिस्ट्री में reg फ़ाइल कैसे आयात कर सकता हूं? निम्न कोड उपयोगकर्ता को एक पुष्टिकरण बॉक्स प्रदर्शित कर रहा है (हां/नहीं)।सी # - उपयोगकर्ता पुष्टिकरण बॉक्स के बिना रजिस्ट्री में reg फ़ाइल आयात करें

Process regeditProcess = Process.Start("key.reg", "/S /q"); // not working 
regeditProcess.WaitForExit(); 
+8

ऐसा क्यों नहीं करना चाहिए? –

उत्तर

43

regedit.exe को पैरामीटर के रूप फ़ाइल भेजें:

Process regeditProcess = Process.Start("regedit.exe", "/s key.reg"); 
regeditProcess.WaitForExit(); 

स्रोत: इसके बजाय एक .reg फ़ाइल को क्रियान्वित करने के http://www.mycsharpcorner.com/Post.aspx?postID=29

+0

जो मैं खोज रहा था, धन्यवाद। –

+8

एक उपयोगी संकेत, सुनिश्चित करें कि फ़ाइल नाम उद्धरण के साथ संलग्न है यदि इसमें रिक्त स्थान शामिल हैं जैसे यह कमांड लाइन पर होगा। – doobop

6

, आप का उपयोग कर रजिस्ट्री करने के लिए अपने परिवर्तन करने के लिए सक्षम होना चाहिए Microsoft.Win32 नामस्थान में प्रदान की गई कार्यक्षमता।

यह इस एपीआई का उपयोग कर create a registry key के लिए काफी आसान है:

RegistryKey key = Registry.CurrentUser.CreateSubKey("Names"); 
key.SetValue("Name", "Isabella"); 
key.Close(); 

जब तक आप नए चाबियों का एक थोक लोड बनाने की जरूरत है, मेरा मानना ​​एपीआई को और अधिक विश्वसनीय और maintable दृष्टिकोण है। यदि किसी बिंदु पर, आपको सिस्टम-व्यापी या रजिस्ट्री के प्रति-उपयोगकर्ता शाखा में अपनी सेटिंग्स लिखने के लिए वैकल्पिक बनाने का निर्णय लेना होगा, तो आपका अधिकांश कोड दोनों मामलों के लिए पुन: प्रयोज्य होगा। बस बदलाव करने के लिए एक और कुंजी चुनें।

शायद अधिक महत्वपूर्ण, एपीआई आपको सटीक (कोड में) निर्दिष्ट करने देता है कि उन मामलों को कैसे संभाला जाए, जहां आप रजिस्ट्री में मौजूद कुंजी (कुंजी) पहले से मौजूद हैं। क्या मुझे मौजूदा कुंजी को हटा देना चाहिए और मेरा डालना चाहिए, मौजूदा कुंजी के भीतर अद्यतन मान, चुपचाप अनदेखा या अपवाद उठाएं?

+2

क्या एपीआई का उपयोग करके उसे कोई विशेष कारण यह करना चाहिए? –

+1

मान लें कि ओपी को एक आधिकारिक पैच स्थापित करने की आवश्यकता है, जो एक विशाल reg फ़ाइल है। चीजों को करने के हमेशा वैध कारण हैं। – Kobi

+1

मैं बता सकता हूं कि एक विशाल reg फ़ाइल है। इस तरह से सेट प्रत्येक के लिए वैल्यू * एसएस में दर्द हो सकता है। –

12

उत्तर 2 में कोड सही है, लेकिन पूरा नहीं है। यह तब काम करेगा जब आप जिस निर्देशिका में रेफरिंग कर रहे हैं उस पथ/फ़ाइल में कोई स्पैसिंग नहीं है जिसे आप उदाहरण के लिए रेफर कर रहे हैं C: \ ProgramFiles \ key.reg ठीक काम करेगा, लेकिन C: \ Program Files \ key.reg नहीं होगा कार्य क्योंकि पथ में रिक्त स्थान हैं।

समाधान:

string directory= @"C:\Program Files (x86)\key.reg"; 
Process regeditProcess = Process.Start("regedit.exe", "/s \"" + directory + "\""); 
regeditProcess.WaitForExit(); 
5

मैं RegEdit आह्वान करने के लिए करने की कोशिश की, लेकिन हर बार मैं एक पुष्टि शीघ्र मिल गया (UAC सक्षम है, तो कोई ऊंचा अनुमतियाँ)। के बजाय regedit मैं "Reg.exe" (जो XP के बाद से विंडोज में शामिल है)

  Process proc = new Process(); 

      try 
      { 
       proc.StartInfo.FileName = "reg.exe"; 
       proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
       proc.StartInfo.CreateNoWindow = true; 
       proc.StartInfo.UseShellExecute = false; 

       string command = "import " + path; 
       proc.StartInfo.Arguments = command; 
       proc.Start(); 

       proc.WaitForExit(); 
      } 
      catch (System.Exception) 
      { 
       proc.Dispose(); 
      } 

कोई संवाद, कोई शीघ्र recommand।

कमांड "reg import path/to/the/reg.reg" जैसे कुछ है

+0

चेतावनी: ** HEUR/QVM03.0.0000.Malware.Gen ** नामक एक मैलवेयर होगा जब आप इस विधि के साथ [Virustotal] (http://virustotal.com) में अपना ऐप स्कैन कर लेंगे। – newbieguy

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^