2012-01-16 28 views
5

私のプログラムでは起動時にレジストリキーをチェックしていますが、何らかの形で存在しない場合は、ShellExecuteの助けを借りてアプリケーションフォルダコマンド。このコマンドを実行するときにどのようにconfimationメッセージを受け取るのを避けることができますか。それを行う方法はありますか、それともセキュリティ上の理由から可能ではありませんか?shellexecuteコマンドで.regファイルを実行すると確認メッセージが表示されないようにするには

+5

regファイルを実行しないでください。レジストリAPIを直接使用してください。 –

+0

あなたが与えたアドバイスは貴重だと確信していますが、なぜこのようにしてはならないのか説明してください。もう一つは、実行したいレジストリファイルに、データ認識グリッドコンポーネントによって自動的に挿入されたたくさんのエントリが含まれています。私が手動で書き込もうとすると時間の無駄を意味しませんか? –

+0

たとえば、64ビットシステムでレジストリリダイレクタをどのように処理しますか? –

答えて

12

/sコマンドラインスイッチを使用します。 (http://support.microsoft.com/kb/82821参照)

+0

そして、Delphiではどうしたらいいですか?私はまだShellExecuteを使用しますか?例を挙げると –

+4

ShellExecuteは正常に動作します。私自身は 'regedit'ではなく' reg import'を使用します。 –

11

可能です。二つの方法があります:

  1. % WINDIR%\ SYSTEM32 \ regedit.exeを/sの file.reg
  2. %のWINDIR%\ SYSTEM32 \ reg.exe輸入file.reg

のどちらかだろう自動的にfile.regをレジストリにインポートします。

3

また、あなたは、このリンクにunitEXRegistry.pas

を試すことができます。このunitEXRegistry.pasユニットは、レジストリファイルをエクスポートすることは非常に便利な機能を持っており、また静かにインポート

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; 

、* .regファイルをインポートするためにこれを試してください

01あなたは(静かに)使用することができますインポートする次に
 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; 

* .regファイルをエクスポート
 procedure TForm1.Button1Click(Sender: TObject); 
     var 
     texpr : TExRegistry; 
     begin 
      texpr:=TExRegistry.Create; 
      texpr.ImportRegFile('c:\myReg.reg'); 
      texpr.Free; 
     end; 
関連する問題