2012-11-24 6 views
6

Potrzebuję twojej pomocy, muszę skopiować plik do jednego folderu, zanim rozpocznie się inno setup lub przed stroną wybranego katalogu, chcę, aby ten plik został skopiowany z instalatora, a nie ze źródła zewnętrznego, jeśli ktoś może daj przykład, proszę.Instalacja Inno - jak skopiować plik przed uruchomieniem instalacji?

używam tego kodu:

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; 

Mam nadzieję, że ktoś daje lepszy pomysł na przykładzie. Dzięki od teraz.

+2

Należy pamiętać, że jest to ogólnie pukali do wprowadzania zmian w systemie użytkownika przed kliknięciem ostateczną Dalej, aby zacząć instalację - - w końcu do tego momentu mogą nadal chcieć anulować. Używanie lub modyfikowanie ustawień w HKCU jest również niezadowolone, ponieważ mogą nie odpowiadać oczekiwanemu użytkownikowi. – Miral

Odpowiedz

10

Aby wyodrębnić plik z archiwum w dowolnym momencie konfiguracji trzeba będzie trzeba użyć procedury ExtractTemporaryFile. Ta procedura wyodrębnia plik z sekcji [Files] do katalogu tymczasowego używanego przez aplikację instalacyjną, który można znaleźć na ścieżce określonej przez stałą {tmp}. Wtedy po prostu skopiujesz taki wyodrębniony plik do katalogu docelowego, rozwijając wspomnianą stałą.

Jeśli chcesz coś zrobić podczas inicjalizacji instalacji, ale przed utworzeniem formularza kreatora, użyj funkcji zdarzenia InitializeSetup. Zauważ, że możesz nawet wyjść z konfiguracji z tej funkcji bez wyświetlania formularza kreatora, np. jeśli plik, który zamierzasz skopiować, jest tak ważny. Oto przykładowy kod, ale najpierw spojrzeć na commented version nim na kilka szczegółów:

[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

Musisz wyodrębnić plik, najpierw do katalogu tymczasowego, a następnie skopiuj go tam, gdzie chcesz. Coś jak to powinno działać:

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