2012-01-16 24 views
5

Trong chương trình của tôi, tôi kiểm tra cho một khóa registry lúc khởi động và nếu bằng cách nào đó nó không tồn tại Tôi chạy file reg nằm ở wit thư mục ứng dụng sự giúp đỡ của ShellExecute chỉ huy. Làm thế nào tôi có thể tránh nhận được thông báo confimation khi thực hiện lệnh này. Có cách nào để làm điều đó hay vì lý do an ninh không thể?Làm thế nào để tránh thông báo xác nhận khi thực hiện một file .reg với lệnh ShellExecute

+5

Đừng chạy file reg. Sử dụng API đăng ký trực tiếp. –

+0

tôi chắc chắn rằng những lời khuyên bạn cung cấp không có giá trị nhưng bạn có thể xin giải thích là tại sao tôi không nên làm điều đó theo cách này? Và một điều nữa, tệp đăng ký mà tôi muốn thực thi chứa hàng tấn mục nhập được tự động chèn vào bởi một thành phần lưới nhận biết dữ liệu. Nếu tôi cố gắng viết nó theo cách thủ công thì điều đó không có nghĩa là lãng phí thời gian? –

+0

Ví dụ, làm thế nào bạn sẽ đối phó với redirector đăng ký trên hệ thống 64 bit? –

Trả lời

12

Sử dụng/s dòng lệnh switch. (Xem http://support.microsoft.com/kb/82821)

+0

Và làm thế nào để làm điều đó trong Delphi? Tôi vẫn sử dụng ShellExecute? Một ví dụ sẽ được đánh giá cao –

+4

ShellExecute sẽ hoạt động tốt. Bản thân tôi sẽ sử dụng 'reg import' thay vì' regedit'. –

11

Có thể. Hai phương pháp là:

  1. % windir% \ system32 \ regedit.exe /s file.reg
  2. % windir% \ system32 \ reg.exe nhập khẩu file.reg

Hoặc sẽ âm thầm nhập file.reg vào sổ đăng ký.

3

thử này để nhập các file * .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; 

Bạn cũng có thể thử liên kết này unitEXRegistry.pas

đơn vị unitEXRegistry.pas này có chức năng rất hữu ích để xuất tập tin registry và cũng nhập âm thầm các xuất khẩu * .reg tập tin

 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; 

Sau đó, nhập khẩu, bạn có thể sử dụng (âm thầm)

 procedure TForm1.Button1Click(Sender: TObject); 
     var 
     texpr : TExRegistry; 
     begin 
      texpr:=TExRegistry.Create; 
      texpr.ImportRegFile('c:\myReg.reg'); 
      texpr.Free; 
     end; 
Các vấn đề liên quan