在我的程序中,我会在启动时检查注册表项,如果它不存在,我会在ShellExecute命令的帮助下执行应用程序文件夹中的reg文件。我如何才能避免在执行此命令时收到确认消息。是否有办法做到这一点,或者根据安全原因,这是不可能的?
htrmnn0y1#
使用/s命令行开关。
c2e8gylq2#
有可能。有两种方法:1.%windir%\system32\注册表编辑器. exe**/s**文件注册表1.%windir%\system32\reg.exe导入文件. reg两种方法都将以静默方式将file.reg导入注册表。
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;
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=
4条答案
按热度按时间htrmnn0y1#
使用/s命令行开关。
c2e8gylq2#
有可能。有两种方法:
1.%windir%\system32\注册表编辑器. exe**/s**文件注册表
1.%windir%\system32\reg.exe导入文件. reg
两种方法都将以静默方式将file.reg导入注册表。
jslywgbw3#
尝试导入 *.reg文件,
你也可以试试这个链接unitEXRegistry.pas
此unitEXRegistry.pas单元具有非常有用的函数,可导出注册表文件,也可静默导入导出的 *.reg文件
然后,要导入,您可以使用(静默)
cbeh67ev4#
显然,REG IMPORT中有一个bug-它将成功消息写入STDERR而不是STDOUT。
下面的.bat代码解决了这个问题。成功消息被丢弃,但失败消息被显示。