inno setup - Run a batch file only one time when the installer starts -
मुझे निम्नलिखित के साथ एक समस्या है:
function InitializeSetup (): बूलियन; var परिणाम कोड: पूर्णांक; परिणाम शुरू: = सच; अगर संदेशबाक्स ('मदद करना चाहते हैं?', एमबीकॉन्फ़र्मेशन, एमबी_एजएनएनओ) = आईडीइई तो CreateBatch () शुरू करें; परिणाम ('सीएमडी.एक्सई', '/ सी' '+ विस्तारित करें (' {टीएमपी} बैच.बीट '),' ', एसडब्ल्यू_हाइड, ईवावेअटिनटिल्टिटेड, रिजल्टकोड) परिणाम: = गलत; अंत; समाप्ति; बैच फ़ाइल में मुझे निम्नलिखित मिले:
@ECHO OFF D: सीडी डी: \ _ INSTALLER \ आउटपुट "installer.exe" /SAVEINF="opt.txt " तो यह मूलतः फिर से इंस्टॉलर को फिर से खोलता है ... (अनंत लूप)
क्या पूछने का कोई तरीका है: Wanna केवल 1 समय के लिए? और यदि उपयोगकर्ता ने हां क्लिक किया है, तो बैच को निष्पादित किया जाना चाहिए, अन्यथा अगर उपयोगकर्ता ने क्लिक नहीं किया है तो इसे सामान्य रूप से इंस्टॉल करना जारी रखना चाहिए। समर्थन, बीजीआईएन।
टीला की मदद से और मैं निम्न स्क्रिप्ट का उपयोग करके अपने लक्ष्य को हासिल किया है: < / p>
[सेटअप] AppName = मेरा प्रोग्राम ऐप = संस्करण = 1.5 DefaultDirName = {pf} \ मेरा प्रोग्राम [कोड] #ifdef UNICODE #define AW "W" #sefine AW "A" #endif type हिंसटास = थेंडल; प्रक्रिया बाहर निकलेंप्रक्रिया (बाहर निकलने के लिए: पूर्णांक); बाहरी 'एक्स्टप्रक्र्रेस @ kernel32.dll stdcall'; फ़ंक्शन शेलएक्सेक्यूट (एचडब्ल्यूडब्ल्यूडी: एचडब्ल्यूएनडी; एलपीओपरेशन: स्ट्रिंग; एलपीफ़ाइल: स्ट्रिंग; एलपीपीरामेट्स: स्ट्रिंग; एलपी डायरेक्टरी: स्ट्रिंग; एनशो सीएमडी: इंटिजर): हिस्टान्स; बाहरी 'शेलएक्सेक्यूट {#AW}@shell32.dll stdcall'; वाई के साथ INF: बूलियन; फ़ंक्शन CmdLineParamExists (const Value: स्ट्रिंग): बूलियन; var I: पूर्णांक; परिणाम शुरू करें: = गलत; I: के लिए = 1 ParamCount करने के लिए करते हैं यदि तुलना टेक्स्ट (पैरामीटर (आई), मान) = 0 फिर परिणाम शुरू: = सत्य; टूटना; समाप्त; समाप्त; // प्रारंभ सेटअप फ़ंक्शन InitializeSetup (): बूलियन; Var परिणाम कोड: पूर्णांक; पैरामा: स्ट्रिंग; रेटवल: हिंसा; परिणाम शुरू: = सच; WithINF: = सीएमडीलाइन पार्मएक्सिस्ट्स ('/ SAVEINF = opt.txt'); यदि इनएएनएफ के साथ नहीं तो फिर पैरामाएं शुरू करें: = '/SAVEINF=opt.txt'; शैलएक्सेक्यूट (0, 'ओपन', विस्तारित कॉन्स्टेंट ('{srcexe}'), परम, '', SW_SHOW); ExitProcess (0); समाप्त; समाप्त; LE: TLama (बहुभाषी समर्थन में जोड़ा गया) द्वारा बनाई गई समान कार्य करने के लिए एक छोटा कोड:
[सेटअप] AppName = मेरा प्रोग्राम ऐप = 1.5 DefaultDirName = {pf} \ मेरा प्रोग्राम दिखाना भाषाईडॉल = हाँ [भाषाएँ] नाम: "एन"; MessagesFile: "कंपाइलर: डिफ़ॉल्ट.isl" नाम: "nl"; MessagesFile: "कंपाइलर: भाषाएँ \ Dutch.isl" [कोड] #ifdef UNICODE # परिभाषित ऐडवर्ड्स "डब्ल्यू" # # एडीए "ए" # # एडीआईफ़ प्रकार हिस्टास्ट = थेंडल; फ़ंक्शन शेलएक्सेक्यूट (एचडब्ल्यूडब्ल्यूडी: एचडब्ल्यूएनडी; एलपीओपरेशन: स्ट्रिंग; एलपीफ़ाइल: स्ट्रिंग; एलपीपीरामेट्स: स्ट्रिंग; एलपी डायरेक्टरी: स्ट्रिंग; एनशो सीएमडी: इंटिजर): हिस्टान्स; बाहरी 'शेलएक्सएक्यूट {#AW}@shell32.dll stdcall'; फ़ंक्शन CmdLineParamExists (const Value: स्ट्रिंग): बूलियन; Var I: पूर्णांक; परिणाम शुरू करें: = गलत; I: के लिए = 1 पैरामाउंट करने के लिए करते हैं यदि तुलना टेक्स्ट (पैरामाट्र (आई), वैल्यू) = 0 फिर परिणाम शुरू होता है: = सत्य; टूटना; समाप्त; समाप्त; फ़ंक्शन प्रारंभ करेंसेटअप: बूलियन; var परम: स्ट्रिंग; शुरू करें / फिर से उपयोग करने के लिए पैराम्स वेरिएबल तैयार करें यदि विस्तारित करें ('{language}') = 'एन' तो पैरामाएं शुरू करें: = '/SAVEINF=opt.txt / LANG = en'; समाप्त; यदि विस्तृत करेंसंपादित करें ('{language}') = 'nl' तो पैरामीटर शुरू करें: = '/SAVEINF=opt.txt / LANG = nl'; समाप्त; // यदि यह अपेक्षित पैरामीटर निर्दिष्ट है तो यह सेटअप चलाने की अनुमति दें; या, यदि ऐसा नहीं है, तो इसे चलाने की अनुमति दें / जब ShellExecute विफल रहता है; यह इस तरह काम करता है - पहले सीएमडीलाइन पारामिक्स फ़ंक्शन का मूल्यांकन करता है और // यदि वह रिटर्न देता है, तो बयान का दूसरा भाग (शैलएक्सेक्यूट) नहीं चलाया जाएगा (मूल्यांकन); जब // पैरामीटर नहीं पाया जाता है, तो सीएमडीलाइन पार्मएक्सिस्ट गलत लौटते हैं और स्टेटमेंट मूल्यांकन चालू होता है, // शैलएक्सेक्यूट सेटअप को चलाने के लिए और परिणाम रिटर्न पर सही (इस उदाहरण को चलाने के लिए अनुमति देता है) / / जब कोई फ़ंक्शन विफल रहता है लौटा मूल्य & lt; = 32); दूसरे शब्दों में, यदि आप नए सेटअप आवेश को निष्पादित करने में विफल रहता है, तो आप // चलाने के लिए इस सेटअप आवृत्ति को अनुमति देंगे: = सीएमडीलाइन पार्मएक्सिस्ट्स ('/ SAVEINF = opt.txt') या (शेलएक्सएक्यूट (0, '', विस्तृत करेंकॉन्स्टेंट ('{srcexe } '), परम,' ', SW_SHOW) & lt; = 32); समाप्त; सादर, बीजीआईएन
Comments
Post a Comment