2008-12-11 9 views
9

वैकल्पिक रूप से अंतर्निहित प्रगति पट्टी को मैन्युअल रूप से अपडेट करना संभव है? असल में मेरे पास 2 एमएसआई शामिल हैं और बूटस्ट्रैपर के रूप में इनो सेटअप का उपयोग कर रहे हैं, और उपयोगकर्ता इनपुट के आधार पर एक या दोनों एमएसआई स्थापित किए जाने हैं। मेरे पास CurStepChanged में Exec कथन का उपयोग करके कुछ काम कर रहा है लेकिन यह प्रगति पट्टी को अद्यतन नहीं करता है क्योंकि फ़ाइलों को निकाला जाता है और ऐसा लगता है कि इंस्टॉलर रुक गया है। मुझे लगता है कि अंतिम परिणाम यह है कि मैं कुछ प्रगति बार अपडेट चाहता हूं जबकि फ़ाइलों को अस्थायी फ़ोल्डर में निकाला जाता है।इनो सेटअप में [रन] अनुभाग में निष्पादित होने के लिए सशर्त बयान जोड़ना संभव है?

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    ResultCode: Integer; 
begin 
    if(CurStep = ssInstall) then begin 
     if(InstallServer) then begin 
      ExtractTemporaryFile('ServerSetup.msi'); 
      Exec('msiexec',ExpandConstant('/i "{tmp}\ServerSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}\Server\" ALLUSERS=2'),'', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
     end; 
     if(InstallClient) then begin 
      ExtractTemporaryFile('ClientSetup.msi'); 
      Exec('msiexec',ExpandConstant('/i "{tmp}\ClientSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}\Client\" ALLUSERS=2'),'', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
     end; 
    end; 
end; 

उत्तर

24

क्यों बस कुछ इस तरह की कोशिश नहीं:

[Files] 
Source: ClientSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Components: Client 
Source: ServerSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Components: Server 

[Run] 
Filename: msiexec.exe; Parameters: /i "{tmp}\ClientSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}\Client\" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing client; Components: Client 
Filename: msiexec.exe; Parameters: /i "{tmp}\ServerSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}\Server\" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing server; Components: Server 

[Components] 
Name: Client; Description: Client Installation 
Name: Server; Description: Server Installation 
बेशक

आप जरूरी Components उपयोग करने के लिए की जरूरत नहीं है निम्नलिखित मेरे वर्तमान कोड है। आपने यह नहीं लिखा कि आप किस इंस्टालर को चलाने के लिए तय करते हैं। आप और अधिक जटिल तर्क की जरूरत है आप भी रूप में इस्तेमाल कर सकते हैं Check functions:

[Files] 
Source: ClientSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Check: CheckClient 
Source: ServerSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Check: CheckServer 

[Run] 
Filename: msiexec.exe; Parameters: /i "{tmp}\ClientSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}\Client\" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing client; Check: CheckClient 
Filename: msiexec.exe; Parameters: /i "{tmp}\ServerSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}\Server\" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing server; Check: CheckServer 

[Code] 
function CheckClient: Boolean; 
begin 
    Result := WhateverCondition; 
end; 

function CheckServer: Boolean; 
begin 
    Result := WhateverOtherCondition; 
end; 
+0

मुझे लगता है कि जांच: क्या मुझे पता करने के लिए आवश्यक है। मैंने इनो सेटअप सहायता फ़ाइल में जो कुछ भी देखा है (जो आश्चर्यजनक रूप से काफी सहायक रहा है) में यह कुछ भी नहीं देखा था और यह ISTool gui में एक विकल्प नहीं था। +1 अब और स्वीकार करता है अगर यह काम करता है :) – Davy8

+1

मैं उत्तर में प्रासंगिक सहायता फ़ाइल सेक्शन से जुड़ा हूं ("फ़ंक्शन चेक करें" देखें)। यह वहां है। ISTool भी इसका समर्थन करता है। बस "स्क्रिप्टिंग" खंड में किसी भी आइटम के "सामान्य" टैब को देखें। यदि आपने पहले से ही एक बूलियन परिणाम के साथ कार्यों को लिखा है तो आप उन्हें वहां एक ड्रॉपडाउन से चुन सकते हैं। –

+0

हाँ, मैंने देखा कि मैंने ऐसा करने के बाद। ऐसा लगता है कि यह काम करता है और आदर्श के करीब है क्योंकि मुझे शायद घंटे/दिन खर्च किए बिना कस्टम प्रगति संवाद और सामान बनाने के बिना मिल जाएगा। धन्यवाद :) – Davy8

संबंधित मुद्दे