使用shellexecute命令执行.reg文件时如何避免确认消息

时间:2012-01-16 08:10:43

标签: delphi registry message shellexecute confirmation

在我的程序中,我在启动时检查注册表项,如果它不存在,我会在ShellExecute命令的帮助下执行位于应用程序文件夹中的reg文件。如何在执行此命令时避免获取混淆消息。有没有办法做到这一点,或者出于安全原因,这是不可能的?

4 个答案:

答案 0 :(得分:15)

使用/ s命令行开关。 (见http://support.microsoft.com/kb/82821

答案 1 :(得分:13)

这是可能的。有两种方法:

  1. %windir%\ system32 \ regedit.exe / s file.reg
  2. %windir%\ system32 \ reg.exe import file.reg
  3. 要么将file.reg静默导入注册表。

答案 2 :(得分: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;

答案 3 :(得分:0)

显然 REG IMPORT 中存在错误 - 它将成功消息写入 STDERR 而不是 STDOUT。

下面的 .bat 代码解决了这个问题。成功信息被丢弃,但显示失败信息。

SET RegError=%TEMP%\RegError.txt
REG IMPORT "%Settings.reg%" 2>"%RegError%" && DEL /Q "%RegError%" || @(ECHO Error importing %Settings.reg%: & TYPE "%RegError%" & PAUSE)
SET RegError=