2012-01-16 14 views
5

के साथ .reg फ़ाइल निष्पादित करते समय पुष्टिकरण संदेश से कैसे बचें मेरे प्रोग्राम में मैं स्टार्टअप पर एक रजिस्ट्री कुंजी की जांच करता हूं और यदि किसी भी तरह से यह अस्तित्व में नहीं है तो मैं अनुप्रयोग फ़ोल्डर में स्थित reg फ़ाइल निष्पादित करता हूं बुद्धिमान ShellExecute की सहायता आदेश। इस आदेश को निष्पादित करते समय मैं कबूल संदेश प्राप्त करने से बच सकता हूं। क्या ऐसा करने का कोई तरीका है या सुरक्षा कारणों से यह संभव नहीं है?shellexecute कमांड

+5

reg फ़ाइल निष्पादित न करें। सीधे रजिस्ट्री एपीआई का प्रयोग करें। –

+0

मुझे यकीन है कि आपके द्वारा दी गई सलाह मूल्यवान है लेकिन क्या आप कृपया यह समझा सकते हैं कि मुझे ऐसा क्यों नहीं करना चाहिए? और एक और बात, रजिस्ट्री फ़ाइल जिसे मैं निष्पादित करना चाहता हूं उनमें कई प्रविष्टियां हैं जो डेटा जागरूक ग्रिड घटकों द्वारा स्वचालित रूप से डाली गई थीं। अगर मैं इसे मैन्युअल रूप से लिखने की कोशिश करता हूं तो इसका मतलब समय बर्बाद नहीं होगा? –

+0

उदाहरण के लिए, आप 64 बिट सिस्टम पर रजिस्ट्री रीडायरेक्टर से कैसे निपटेंगे? –

उत्तर

12

/एस कमांड लाइन स्विच का उपयोग करें। (देखें http://support.microsoft.com/kb/82821)

+0

और डेल्फी में मैं इसे कैसे कर सकता हूं? क्या मैं अभी भी ShellExecute का उपयोग करता हूं? एक उदाहरण की सराहना की जाएगी –

+4

ShellExecute ठीक काम करेगा। मैं खुद 'reg आयात' का उपयोग करता हूं बल्कि 'regedit'। –

11

यह संभव है। दो तरीके हैं:

  1. % windir% \ system32 \ regedit.exe /एस file.reg
  2. % windir% \ system32 \ Reg.exe आयात file.reg

या तो होगा रजिस्ट्री में चुपचाप file.reg आयात करें।

3

* reg फ़ाइल आयात करने के लिए यह कोशिश,

procedure ImportRegistry; 
     var 
     strProgram :String ; 
     strCommand :String ; 
     fileOne :String ; 
     begin 

fileOne:=ExtractFilePath(Application.ExeName)+ 'my_Resources\Default.reg'; 
strProgram := 'REGEDIT' ; 
strProgram := strProgram + #0 ; 
strCommand := '/SC /C ' + ExtractShortPathName(fileOne) ; 
strCommand := strCommand + #0 ; 

if ShellExecute(0,nil,@strProgram[1],@strCommand[1],nil,SW_HIDE) <= 32 then 
    begin 
     ShowMessage(SysErrorMessage(GetLastError)) ; //if there is any error in importing 
    end; 


end; 

इसके अलावा, आप इस लिंक unitEXRegistry.pas

चुपचाप आयात इस unitEXRegistry.pas इकाई रजिस्ट्री फ़ाइल को निर्यात के लिए बहुत उपयोगी कार्य करता है और यह भी कोशिश कर सकते हैं निर्यात * reg फ़ाइल

 procedure exportREgis; 
     var 
     texpr : TExRegistry; 
     begin 
     texpr:=TExRegistry.Create; 
     texpr.RootKey:=HKEY_CURRENT_USER; 
     texpr.OpenKeyReadOnly('\MyKey'); 
     texpr.ExportKey (ExtractFilePath(Application.ExeName)+'ExportedReg.reg'); 
     texpr.Free; 
     end; 

तो आयात करने के लिए आप (चुपचाप) का उपयोग कर सकते

 procedure TForm1.Button1Click(Sender: TObject); 
     var 
     texpr : TExRegistry; 
     begin 
      texpr:=TExRegistry.Create; 
      texpr.ImportRegFile('c:\myReg.reg'); 
      texpr.Free; 
     end; 
संबंधित मुद्दे