2012-01-16 8 views
5

Nel mio programma controllo la presenza di una chiave di registro all'avvio e se in qualche modo non esiste eseguo il file reg situato nella cartella dell'applicazione con l'aiuto di ShellExecute comando. Come posso evitare di ricevere messaggi di confimazione quando eseguo questo comando. C'è un modo per farlo o per ragioni di sicurezza non è possibile?Come evitare il messaggio di conferma durante l'esecuzione di un file .reg con comando shellexecute

+5

Non eseguire il file reg. Utilizzare direttamente l'API del registro. –

+0

Sono sicuro che il consiglio che hai dato è prezioso, ma potresti spiegare perché non dovrei farlo in questo modo? E ancora una cosa, il file di registro che voglio eseguire contiene tonnellate di voci che sono state inserite automaticamente da una griglia di dati. Se provo a scriverlo manualmente non significherebbe perdere tempo? –

+0

Ad esempio, come gestirai il redirector del registro su sistemi a 64 bit? –

risposta

12

Utilizzare l'opzione della riga di comando/s. (vedi http://support.microsoft.com/kb/82821)

+0

E come lo faccio a Delphi? Continuo a utilizzare ShellExecute? Un esempio sarebbe apprezzato –

+4

ShellExecute funzionerebbe bene. Io userei 'reg import' piuttosto che' regedit'. –

11

È possibile. Due metodi sono:

  1. % windir% \ system32 \ regedit.exe /s file.reg
  2. % windir% \ system32 \ reg.exe importazione file.reg

entrambi i casi sarà importa silenziosamente file.reg nel registro.

3

provare questo per l'importazione del file * .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; 

Inoltre si può provare questo link unitEXRegistry.pas

Questa unità unitEXRegistry.pas ha funzioni molto utili per Esporta file del Registro e anche importare in silenzio il esportati * file 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; 

Poi importare è possibile utilizzare (in silenzio)

 procedure TForm1.Button1Click(Sender: TObject); 
     var 
     texpr : TExRegistry; 
     begin 
      texpr:=TExRegistry.Create; 
      texpr.ImportRegFile('c:\myReg.reg'); 
      texpr.Free; 
     end; 
Problemi correlati