2012-11-24 23 views
6

私はあなたの助けが必要です。inno setupの開始前またはselect dirのページの前に、ファイルをあるフォルダにコピーする必要があります。もし誰かがこのファイルをインストーラからコピーしたいのであれば、例を挙げてください。Inno Setup - セットアップを開始する前にファイルをコピーする方法は?

は、このコードを使用しています:

function NextButtonClick1(PageID: Integer): Boolean; 
begin 
    Result := True; 
    if (PageId = wpWelcome) then begin 
     FileCopy(ExpandConstant('file.exe'), ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\file.exe'), false); 
    end; 
end; 

私は誰かの例とのより良いアイデアを与える願っています。 これからはありがとうございます。

+2

注こと - 結局のところ、彼らはまだ取り消したいと思うかもしれません。 HKCUの設定を使用したり変更したりすることは、あなたが期待しているユーザーのものではない可能性があるため、悩まされています。 – Miral

答えて

10

セットアップアーカイブからあなたがExtractTemporaryFile手順を使用する必要があります必要がある時にファイルを抽出するには。この手順では、[Files]セクションから、セットアップアプリケーションで使用される一時ディレクトリにファイルを抽出します。このディレクトリは、{tmp}定数で指定されたパスにあります。次に、上記の定数を展開して、抽出されたファイルをそこからターゲットディレクトリにコピーします。

セットアップが初期化されているときで、ウィザードフォームが作成される前に何かしたい場合は、InitializeSetupイベント機能を使用します。たとえば、ウィザードのフォームを見ずにその機能から設定を終了することもできます。あなたがコピーしようとしているファイルがそれほど重要なものであれば。ここでは、サンプルコードですが、最初のいくつかの詳細については、それのcommented versionを見てみましょう:一般的に、彼らが実際にインストールを開始するために、最終的な[次へ]をクリックする前に、ユーザーのシステムに変更を加えることに眉をひそめています

[Code] 
function InitializeSetup: Boolean; 
begin 
    Result := True; 
    ExtractTemporaryFile('File.exe'); 
    if FileCopy(ExpandConstant('{tmp}\File.exe'), 
    ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\File.exe'), False) 
    then 
    MsgBox('File copying succeeded!', mbInformation, MB_OK) 
    else 
    MsgBox('File copying failed!', mbError, MB_OK) 
end; 
3

ファイルを抽出するには、最初に一時ディレクトリに移動し、必要な場所にコピーします。このような何か作業をする必要があります:

; Script generated by the Inno Setup Script Wizard. 
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 

#define MyAppName "My Program" 
#define MyAppVersion "1.5" 
#define MyAppPublisher "My Company, Inc." 
#define MyAppURL "http://www.example.com/" 
#define MyAppExeName "MyProg.exe" 

[Setup] 
; NOTE: The value of AppId uniquely identifies this application. 
; Do not use the same AppId value in installers for other applications. 
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
AppId={{5820E516-8DD7-4481-A016-63D3F00438C8} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
;AppVerName={#MyAppName} {#MyAppVersion} 
AppPublisher={#MyAppPublisher} 
AppPublisherURL={#MyAppURL} 
AppSupportURL={#MyAppURL} 
AppUpdatesURL={#MyAppURL} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
OutputBaseFilename=setup 
Compression=lzma 
SolidCompression=yes 

[Languages] 
Name: "english"; MessagesFile: "compiler:Default.isl" 

[Tasks] 
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 

[Files] 
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion 
; NOTE: Don't use "Flags: ignoreversion" on any shared system files 

[Icons] 
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 

[Run] 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent 


[Code] 
function InitializeSetup: Boolean; 
var 
    S: AnsiString; 
begin 
    // Show the contents of Readme.txt (non Unicode) in a message box 
    log('Before Extract'); 
    ExtractTemporaryFile('myprog.exe'); 
    log('Before FileCopy. Dest:' + ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\file.exe')); 
    log('temp: ' + ExpandConstant('{tmp}\myprog.exe')); 
    FileCopy(ExpandConstant('{tmp}\myprog.exe'), ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\file.exe'), false); 
    log('After FileCopy'); 
    Result := True; 
end; 
関連する問題