2013-05-16 31 views
6

インストール前にユーザーファイルをコピー、移動、名前変更するにはどうすればよいですか?InnoSetup - インストール前にファイルをコピーする

我々は簡単に[InstallDelete]セクション使用してファイルを削除することができます。

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

我々が行うことができますコピーを、同様の方法で名前を変更?

編集:私は、[ファイル]セクションでこれを作ってみました

が、ソースファイルが存在しないので、私はコンパイル時にエラーが表示されます。あなたは[Files]セクションを使用することができます

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

ソースファイルが存在しない場合は、どのようInnoSetupインストールに含めることになっている:それは内部的に同じ操作であるとして、彼らは両方のRenameFile機能を使うのか? –

+1

@Thorsten、あなたは['external'](http://www.jrsoftware.org/ishelp/index.php?topic=filessection&anchor=external)フラグを使うことができますが、それがうまくいくとしても悪い考えです。 – TLama

+0

@Thorsten:これらのファイルをインストールに含めたくありません。これらは、ユーザーのアプリケーションの他のサブディレクトリ(ファイルが存在する場合)に移動したいファイルです。 –

答えて

8

ファイルをコピーしますしかし、別のセクションで操作や名前を変更する方法はないと思いますので、[Code]セクションを使用することをお勧めします。

ここでは、移動と名前の変更操作のサンプルコードを示します。

[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 *}'フォルダの1つにあるべきで、インストーラを使って移動することはできません。インストーラは1人のユーザーだけが実行できますが、複数のユーザーがアプリケーションを使用している可能性があります。これらを管理するには、アプリケーション自体が責任を負う必要があります。 – Miral

関連する問題