2013-05-16 38 views
6

Làm cách nào để sao chép, di chuyển, đổi tên tệp người dùng trước khi cài đặt?InnoSetup - sao chép các tập tin trước khi cài đặt

Chúng ta có thể dễ dàng xóa các tập tin bằng cách sử dụng [InstallDelete] phần:

[InstallDelete] 
Type: files; Name: "{app}\SomeFile.exe"; 

Chúng ta có thể làm sao chép, đổi tên theo một cách tương tự?

EDIT:

tôi đã cố gắng để làm điều này trong [file] phần nhưng tôi nhận được một lỗi trong quá trình biên soạn bởi vì tập tin nguồn không tồn tại:

[Files] 
Source: "{app}\SomeFile.exe"; DestDir: "{app}\SomeDir\SomeFile.exe"; 
+0

Nếu tệp nguồn không tồn tại, InnoSetup phải bao gồm nó trong khi cài đặt như thế nào? –

+1

@Thorsten, bạn có thể sử dụng cờ ['external'] (http://www.jrsoftware.org/ishelp/index.php?topic=filessection&anchor=external), nhưng đó là một ý tưởng tồi ngay cả khi nó hoạt động. – TLama

+0

@Thorsten: Tôi không muốn bao gồm các tệp này trong quá trình cài đặt. Đây là các tệp lưu của người dùng mà tôi muốn di chuyển trong thư mục con khác của ứng dụng (nếu tệp tồn tại). –

Trả lời

8

Đối với việc sao chép dữ liệu mà bạn có thể sử dụng phần [Files] , nhưng tôi không nghĩ rằng có một cách để di chuyển hoặc đổi tên hoạt động trong một phần riêng biệt, vì vậy tôi sẽ đề nghị bạn sử dụng phần [Code] cho việc này.

Đây là mã mẫu cho các hoạt động di chuyển và đổi tên. Cả hai đều sử dụng chức năng RenameFile vì nó hoạt động trong cùng một hoạt động:

[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssInstall then 
    begin 
    // move file 
    if not RenameFile(ExpandConstant('{app}\SomeDir\SomeFile.exe'), ExpandConstant('{app}\SomeFile.exe')) then 
     MsgBox('File moving failed!', mbError, MB_OK); 
    // rename file 
    if not RenameFile(ExpandConstant('{app}\SomeFile.exe'), ExpandConstant('{app}\RenamedSomeFile.exe')) then 
     MsgBox('File moving failed!', mbError, MB_OK); 
    end; 
end; 
+1

Cảm ơn bạn! Tôi chỉ đang tìm kiếm hàm [Code] để sử dụng để đặt mã di chuyển. thủ tục CurStepChanged (CurStep: TSetupStep); sẽ hoạt động tốt. Thậm chí tốt hơn, tôi có thể cảnh báo người dùng rằng tôi đã di chuyển các tệp lưu của anh ấy. –

+0

Bạn được chào đón! Và có, điều đó nghe có vẻ công bằng với người dùng :-) – TLama

+1

Hãy nhớ rằng các tệp người dùng phải nằm trong một trong các thư mục '{user *}' - và bạn không thể dựa vào trình cài đặt để di chuyển chúng cho bạn. Trình cài đặt chỉ được chạy bởi một người dùng, nhưng nhiều người có thể đã sử dụng ứng dụng của bạn. Nó phải là trách nhiệm của bản thân ứng dụng để quản lý chúng. – Miral

Các vấn đề liên quan