Как избежать появления подтверждающего сообщения при выполнении файла .reg с командой shellexecute - PullRequest
6 голосов
/ 16 января 2012

В моей программе я проверяю наличие ключа реестра при запуске и, если каким-то образом его не существует, выполняю reg-файл, расположенный в папке приложения, с помощью команды ShellExecute.Как я могу избежать получения сообщений об ошибках при выполнении этой команды.Есть ли способ сделать это или по соображениям безопасности это невозможно?

Ответы [ 3 ]

15 голосов
/ 16 января 2012

Используйте ключ командной строки / s.(см. http://support.microsoft.com/kb/82821)

13 голосов
/ 16 января 2012

Это возможно. Два метода:

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

Любой из них автоматически импортирует file.reg в реестр.

3 голосов
/ 17 января 2012

попробуйте это для импорта файла * .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

Этот модуль unitReReistry.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;
...