在我的程序中,我在启动时检查注册表项,如果它不存在,我会在ShellExecute命令的帮助下执行位于应用程序文件夹中的reg文件。如何在执行此命令时避免获取混淆消息。有没有办法做到这一点,或者出于安全原因,这是不可能的?
答案 0 :(得分:15)
使用/ s命令行开关。 (见http://support.microsoft.com/kb/82821)
答案 1 :(得分:13)
这是可能的。有两种方法:
要么将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=