2012-07-10 10 views
6

मैं अपने एप्लिकेशन के लिए इंस्टॉलर बनाने के लिए इनो सेटअप का उपयोग कर रहा हूं। इंस्टॉलर बहुत बुनियादी है और बस कुछ फाइलों की प्रतिलिपि बनाता है। यह बहुत अच्छा काम करता है और मैं इसके साथ खुश हूं।इंस्टॉलेशन के दौरान इनो सेटअप लॉन्च निष्पादन योग्य (ड्राइवर स्थापित करने के लिए)

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

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: postinstall skipifsilent 

यह काम करता है, लेकिन उपयोगकर्ता को सही सीधा चुनना है। यहां का लाभ यह है कि वह इसे इंस्टॉल नहीं करना चुन सकता है (इस मामले में एप्लिकेशन केवल यूएसबी कार्यक्षमता को अनदेखा करता है जो ठीक है)। जो मैं वास्तव में चाहता हूं वह सिस्टम के प्रत्यक्ष रूप से पता लगाने और सेटअप प्रक्रिया को चलाने के लिए है। यह [Run] अनुभाग में होना आवश्यक नहीं है, हालांकि मेरे पास इसके खिलाफ कुछ भी नहीं होगा (क्योंकि उपयोगकर्ता इसे इंस्टॉल नहीं करना चुन सकता है)।

मैं भी कुछ कोड मिल गया है और इस तरह इसे चलाने के लिए करने की कोशिश की:

[Code] 
procedure CurStepChanged (CurStep: TSetupStep); 
var 
    WorkingDir: String; 
    ReturnCode: Integer; 
begin  
    if (ssInstall = CurStep) then 
    Log('Starting driver installation'); 
    WorkingDir := ExpandConstant ('{app}\driver'); 
    Exec ('IviSharedComponents_2.2.1.exe', '', WorkingDir, SW_SHOW, ewWaitUntilTerminated, ReturnCode); 
end; 

लेकिन इस स्थापना शुरू नहीं करता है (हालांकि मैं लॉग प्रविष्टि 'ड्राइवर स्थापना शुरू' देख सकते हैं)। क्या मेरे रास्ते में कुछ गड़बड़ है? मैं गलत क्या कर रहा हूं और मैं इस स्क्रिप्ट को सही तरीके से सही निष्पादन योग्य चुनने के लिए कैसे बदल सकता हूं?

संपादित करें: मैंने प्रस्तावित समाधान का उपयोग [Tasks] प्रविष्टि के साथ किया था। कार्यान्वयन इस तरह दिखता है (केवल संदर्भ के लिए):

[Tasks] 
Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:"; 

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

यह बहुत अच्छी तरह से काम करता है, आपकी मदद के लिए बहुत बहुत धन्यवाद!

उत्तर

8

इस मामले में, यह postinstall झंडा दूर करने के लिए सेटअप प्रक्रिया के अंत में तो यह बिना शर्त चलाता है सबसे अच्छा है (लेकिन इससे पहले कि यह समाप्त कहते हैं) और सही bitness तक सीमित करने के लिए एक Check: पैरामीटर जोड़ें:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent 

यदि आप इसे सशर्त होना चाहते हैं, तो आप सामान्य [Tasks] प्रविष्टि का उपयोग कर सकते हैं जो सेटअप शुरू होने से पहले संकेत देता है।

+0

बहुत अच्छा, बहुत बहुत धन्यवाद, यह वही है जो मैं चाहता था! :) – brimborium

+1

मैंने अपने प्रश्न के निचले हिस्से में अपना अंतिम समाधान ('[कार्य] 'प्रविष्टि के साथ) भी जोड़ा। – brimborium

+0

Thx, वास्तव में टाइपो। ;) – brimborium

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