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
Come evitare il messaggio di conferma durante l'esecuzione di un file .reg con comando shellexecute
risposta
Utilizzare l'opzione della riga di comando/s. (vedi http://support.microsoft.com/kb/82821)
E come lo faccio a Delphi? Continuo a utilizzare ShellExecute? Un esempio sarebbe apprezzato –
ShellExecute funzionerebbe bene. Io userei 'reg import' piuttosto che' regedit'. –
È possibile. Due metodi sono:
- % windir% \ system32 \ regedit.exe /s file.reg
- % windir% \ system32 \ reg.exe importazione file.reg
entrambi i casi sarà importa silenziosamente file.reg nel registro.
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;
Non eseguire il file reg. Utilizzare direttamente l'API del registro. –
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? –
Ad esempio, come gestirai il redirector del registro su sistemi a 64 bit? –