2012-01-16 69 views
5

在我的程序中,我在啓動時檢查註冊表項,如果它不存在,我使用ShellExecute幫助執行位於應用程序文件夾中的reg文件命令。如何避免在執行此命令時獲取配置消息。有沒有辦法做到這一點,或根據安全原因,這是不可能的?如何避免使用shellexecute命令執行.reg文件時的確認消息

+5

不要執行reg文件。直接使用註冊表API。 – 2012-01-16 08:13:35

+0

我相信你給出的建議很有價值,但請你解釋爲什麼我不應該這樣做?還有一件事,我想要執行的註冊表文件包含大量由數據感知網格組件自動插入的條目。如果我嘗試手動編寫它不會浪費時間嗎? – 2012-01-16 08:24:50

+0

例如,你將如何處理64位系統上的註冊表重定向器? – 2012-01-16 08:31:23

回答

12

使用/ s命令行開關。 (見http://support.microsoft.com/kb/82821

+0

我該如何在Delphi中做到這一點?我仍然使用ShellExecute?一個例子,將不勝感激 – 2012-01-16 08:30:08

+4

ShellExecute會正常工作。我自己我會使用'reg import'而不是'regedit'。 – 2012-01-16 09:06:33

11

這是可能的。有兩種方法:

  1. %WINDIR%\ SYSTEM32 \ REGEDIT.EXE /s的 file.reg
  2. %WINDIR%\ SYSTEM32 \ REG.EXE進口file.reg

要麼會靜靜地將file.reg導入到註冊表中。

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; 
相關問題