2013-05-16 43 views
6

如何在安裝前複製,移動和重命名用戶文件?InnoSetup - 安裝前複製文件

我們可以使用[InstallDelete]部分很容易地刪除文件:

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

我們可以做複製,重命名以類似的方式?

編輯:

我試圖讓這個在[文件]節,但我在編譯過程中收到一個錯誤,因爲源文件不存在:

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

如果源文件不存在,如何InnoSetup應該包括它的安裝? –

+1

@Thorsten,你可以使用['external'](http://www.jrsoftware.org/ishelp/index.php?topic=filessection&anchor=external)標誌,但即使它能夠正常工作也不是個好主意。 – TLama

+0

@Thorsten:我不想在安裝中包含這些文件。這些是我想要在應用程序的其他子目錄中移動的用戶的保存文件(如果文件存在)。 –

回答

8

複製文件可以使用[Files]節,但我不認爲在單獨的部分中有移動或重命名操作的方法,所以我建議您使用[Code]部分。

以下是移動和重命名操作的示例代碼。他們都使用RenameFile功能,因爲它內部是相同的操作:

[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

謝謝!我只是看看用什麼[代碼]功能來放置移動代碼。程序CurStepChanged(CurStep:TSetupStep);將正常工作。更好的是,我可以警告用戶我已經移動了他的保存文件。 –

+0

不客氣!是的,這聽起來對用戶來說是公平的:-) – TLama

+1

請記住,用戶文件應該位於其中一個「{user *}」文件夾中,並且您不能依賴安裝程序來爲您移動這些文件。安裝程序只能由一個用戶運行,但多個可能一直在使用您的應用程序。它必須是應用程序本身的責任來管理這些。 – Miral

相關問題