2012-01-16 36 views
5

En mi programa comprobé una clave de registro al inicio y si de alguna manera no existe ejecuto el archivo reg ubicado en la carpeta de la aplicación con la ayuda de ShellExecute mando. ¿Cómo puedo evitar recibir mensajes de confimación cuando ejecuto este comando? ¿Hay alguna manera de hacerlo o, por razones de seguridad, no es posible?Cómo evitar un mensaje de confirmación al ejecutar un archivo .reg con el comando shellexecute

+5

No ejecute el archivo de registro. Use la API de registro directamente. –

+0

Estoy seguro de que el consejo que me dio es valioso, pero ¿podría explicarme por qué no debería hacerlo de esta manera? Y una cosa más, el archivo de registro que quiero ejecutar contiene toneladas de entradas que fueron insertadas automáticamente por los componentes de la cuadrícula que tienen en cuenta los datos. Si trato de escribirlo de forma manual, ¿no significaría una pérdida de tiempo? –

+0

Por ejemplo, ¿cómo va a lidiar con el redireccionador de registro en los sistemas de 64 bits? –

Respuesta

12

Utilice el modificador de línea de comandos/s. (Consulte http://support.microsoft.com/kb/82821)

+0

¿Y cómo lo hago en Delphi? ¿Todavía uso ShellExecute? Se apreciaría un ejemplo –

+4

ShellExecute funcionaría bien. Yo usaría 'reg import' en lugar de' regedit'. –

11

Es posible. Dos métodos son:

  1. % windir% \ system32 \ regedit.exe /s file.reg
  2. % windir% \ system32 \ reg.exe file.reg importación

Cualquiera de los dos silenciosamente importa file.reg en el registro.

3

probar esto para importar el archivo * .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; 

También se puede tratar este enlace unitEXRegistry.pas

Esta unidad unitEXRegistry.pas tiene funciones muy útiles para exportar archivo de registro y también importar el silencio exportados * archivo .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; 

Luego de importar puede utilizar (en silencio)

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