2012-11-24 4 views
6

Ich brauche deine Hilfe, ich muss eine Datei in einen Ordner kopieren, bevor inno Setup starten oder vor der Seite von dir auswählen, ich möchte diese Datei vom Installer kopiert werden und nicht von einer externen Quelle, wenn jemand kann Gib ein Beispiel, bitte.Inno Setup - Wie kopiert man eine Datei vor dem Setup-Start?

sind mit diesem Code:

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; 

Ich hoffe, dass jemand eine bessere Idee, mit einem Beispiel. Danke von jetzt an.

+2

Beachten Sie, dass es in der Regel vor sich stirnrunzelnd Änderungen an dem System des Benutzers, bevor sie die endgültige Weiter klicken, um tatsächlich die Installation zu starten - - Bis zu diesem Punkt wollen sie vielleicht immer noch abbrechen. Es ist auch verpönt, Einstellungen in HKCU zu verwenden oder zu ändern, da sie möglicherweise nicht für den erwarteten Benutzer sind. – Miral

Antwort

10

eine Datei aus dem Setup zu extrahieren archivieren jedes Mal, wenn Sie benötigen Sie ExtractTemporaryFile Verfahren verwenden. Diese Prozedur extrahiert die Datei aus dem Abschnitt [Files] in ein temporäres Verzeichnis, das von der Anwendung Setup verwendet wird. Sie finden sie im Pfad, der durch die Konstante {tmp} angegeben wird. Dann kopieren Sie die extrahierte Datei einfach von dort in ein Zielverzeichnis, indem Sie die erwähnte Konstante erweitern.

Wenn Sie beim Initialisieren des Setups etwas tun möchten, aber bevor das Assistentenformular erstellt wird, verwenden Sie die Ereignisfunktion InitializeSetup. Beachten Sie, dass Sie das Setup sogar von dieser Funktion beenden können, ohne das Assistentenformular zu sehen, z. Wenn die zu kopierende Datei so wichtig ist. Hier ist ein Beispielcode, aber zuerst einen Blick auf die commented version davon für einige Details:

[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

Sie müssen die Datei zunächst in ein temporäres Verzeichnis extrahieren und dann an die gewünschte Stelle kopieren. So etwas sollte funktionieren:

; 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; 
Verwandte Themen