9

Inno Setupを起動する前、または「ディレクトリの選択」ページの前に、ファイルを1つのフォルダーにコピーする必要があります。このファイルを外部ソースからではなく、インストーラーからコピーしたい。

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

function NextButtonClick(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;
4

2 に答える 2

17

必要なときにいつでもセットアップアーカイブからファイルを抽出するには、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;
于 2012-11-24T10:43:43.173 に答える
5

最初に一時ディレクトリにファイルを抽出してから、目的の場所にコピーする必要があります。このようなものが機能するはずです:

; 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;
于 2012-11-24T02:40:16.670 に答える