2012-11-24 35 views
6

मुझे आपकी मदद की ज़रूरत है, मुझे एक फ़ाइल को एक फ़ोल्डर में प्रतिलिपि बनाने की आवश्यकता है, इससे पहले कि आंतरिक चयन शुरू हो या चुनिंदा डीआईआर के पृष्ठ से पहले, मैं चाहता हूं कि यह फ़ाइल इंस्टॉलर से कॉपी की जाए और बाहरी स्रोत से नहीं, अगर कोई कर सकता है कृपया एक उदाहरण दें।इनो सेटअप - सेटअप प्रारंभ से पहले एक फ़ाइल की प्रतिलिपि कैसे करें?

इस कोड का उपयोग कर रहा हूँ:

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;