2009-12-18 17 views
17

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

मैं की तरह

MyString := ExpandConstant('{AppName}'); 

कुछ के लिए देख रहा हूँ {AppName} सिवाय एक परिभाषित स्थिर नहीं है। [Setup] अनुभाग में परिभाषित पैरामीटर के लिए क्वेरी करने का कोई तरीका है?

उत्तर

13

यह एक बिल्ड-टाइम स्थिर है, इंस्टॉल-टाइम मान नहीं। तो आप ऐसे स्थिरांक को परिभाषित करने के लिए Inno Setup Preprocessor ऐड-ऑन का उपयोग कर सकते हैं। (आप QuickStart pack के माध्यम से इसे आसानी से इंस्टॉल कर सकते हैं)।

परिभाषित निरंतर:

#define AppName "Excellent Foo App" 

[Setup] में लगातार उपयोग करें:

AppName={#AppName} 

और पास्कल कोड में, मैं वाक्य रचना की पूरी तरह से यकीन नहीं है, लेकिन कुछ की तरह:

MyString := {#AppName} 

अपडेट: मुझे एहसास हुआ मेरी स्क्रिप्ट {#emit SetupSetting("AppId")} का उपयोग करती है जो आसान है। Brian's solution ने भी इस विधि को खोजा, और बेहतर है।

+0

हम्म। मैं प्रत्येक ऐपनाम को एक मैक्रो के रूप में परिभाषित नहीं करना चाहता हूं, और उसके बाद उस मैक्रो का उपयोग प्रत्येक प्रोग्राम में वास्तविक ऐपनाम को परिभाषित करने के लिए करें। लेकिन यह एक शुरुआत है। –

+0

मुझे पता है तुम्हारा क्या मतलब है। लेकिन मुझे ऐसा करने के किसी भी अन्य तरीके से अवगत नहीं है। –

19

क्रेग के जवाब से प्रेरित, मैं इनो सेटअप प्रीप्रोसेसर दस्तावेज (आईएसटीूल में, जहां तक ​​मुझे मिला है ऑनलाइन उपलब्ध नहीं है) देख रहा था, और प्रीप्रोसेसर में SetupSetting फ़ंक्शन में आया था।

यह इतनी के रूप में इस्तेमाल किया जा सकता:

MyString := '{#SetupSetting("AppName")}'; 

और जब तक [Setup] धारा (ISPP केवल एक पास हो रहा है) जगह है जहाँ यह प्रयोग किया जाता है से पहले दिखाई देती है और AppName के लिए एक परिभाषा में शामिल के रूप में, यह उन परिणामों को देगा जो मैं चाहता हूं कि प्रत्येक सेटिंग के लिए अतिरिक्त मैक्रो को परिभाषित किए बिना हम निकालना चाहते हैं।

+0

मैं बस अपनी स्क्रिप्ट्स में से एक को देख रहा था, और पता चला कि मैंने इसका इस्तेमाल किया था (वास्तव में मैंने '{#emit सेटअप सेटिंग (" AppId ")}' लेकिन पर्याप्त बंद किया था)। मैं अपना जवाब अपडेट करने आया, लेकिन मुझे लगता है कि तुमने मुझे मार दिया है! –

+3

{# {#emit के लिए शॉर्टेंड है – mlaan