在Inno Setup启动之前或"select directory"页面之前,我需要将文件复制到一个文件夹.我希望从安装程序复制此文件,而不是从外部源复制,如果有人可以举例.
我使用这段代码:
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;
Run Code Online (Sandbox Code Playgroud)
我希望有人用一个例子给出一个更好的主意.
谢谢你们.
TLa*_*ama 15
要在任何时候从设置存档中提取文件,您必须使用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;
Run Code Online (Sandbox Code Playgroud)
您需要先将文件解压缩到一个临时目录,然后将其复制到所需的位置。这样的事情应该起作用:
; 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;
Run Code Online (Sandbox Code Playgroud)