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

wd2eg0qa  于 2023-03-08  发布在  Shell
关注(0)|答案(4)|浏览(187)

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

htrmnn0y

htrmnn0y1#

使用/s命令行开关。

c2e8gylq

c2e8gylq2#

有可能。有两种方法:
1.%windir%\system32\注册表编辑器. exe**/s**文件注册表
1.%windir%\system32\reg.exe导入文件. reg
两种方法都将以静默方式将file.reg导入注册表。

jslywgbw

jslywgbw3#

尝试导入 *.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;
cbeh67ev

cbeh67ev4#

显然,REG IMPORT中有一个bug-它将成功消息写入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=

相关问题