InnoSetup: الحصول على AppName في القسم [رمز
-
20-09-2019 - |
سؤال
أقوم بإنشاء مثبت باستخدام innosetup, وكتابة بعض المعالجات المخصصة في أ [Code]
الجزء. في أحد المعالجات ، أود أن أكون قادرًا على استرداد قيمة AppName
(أو ، من المحتمل ، قيمة المعلمات الأخرى) المحددة في [Setup]
الجزء. هل هناك طريقة لي للقيام بذلك؟ لقد نظرت على الرغم من توثيق, ، لكنني لم أجد أي شيء يسمح لي بالقيام بذلك. يتم إنشاء ملفات InnoSetup الخاصة بنا بالفعل من خلال عملية الإنشاء الخاصة بنا ، والتي تجمع بين شظايا شائعة بين جميع برامجنا والتي هي خاصة بالبرنامج ، لذلك سيكون من غير المريح تحديد الثوابت في الكود لكل برنامج. هل هناك أي طريقة مريحة للقيام بذلك؟
أنا أبحث عن شيء مثل
MyString := ExpandConstant('{AppName}');
إلا {AppName}
ليس ثابتًا محددًا. هل هناك طريقة للاستعلام عن المعلمات المحددة في [Setup]
الجزء؟
المحلول
إنه ثابت وقت البناء ، وليس قيمة وقت التثبيت. حتى تتمكن من استخدام Inno Setup Preprocessor الوظيفة الإضافية لتحديد مثل هذه الثوابت. (يمكنك تثبيته بسهولة عبر حزمة QuickStart).
حدد الثابت:
#define AppName "Excellent Foo App"
استخدم الثابت في [Setup]
:
AppName={#AppName}
وفي رمز Pascal ، لست متأكدًا تمامًا من بناء الجملة ، ولكن شيء مثل:
MyString := {#AppName}
تحديث: أدركت أن إحدى استخدامات البرامج النصية الخاصة بي {#emit SetupSetting("AppId")}
وهو أسهل. حل براين اكتشف أيضا هذه الطريقة ، وأفضل.
نصائح أخرى
مستوحاة من إجابة كريج ، كنت أنظر إلى وثائق المعالج المسبق لإعداد Inno (في Istool ، غير متوفر عبر الإنترنت بقدر ما وجدت) ، وصادف عبر SetupSetting
وظيفة في المعالج المسبق.
يمكن استخدامه على النحو التالي:
MyString := '{#SetupSetting("AppName")}';
وطالما [Setup]
يظهر القسم قبل المكان الذي يتم فيه استخدام هذا (يبدو أن ISPP هو تمريرة واحدة فقط) ، ويتضمن تعريفًا لـ AppName
, ، سيعطي هذا النتائج التي أريدها ، دون الحاجة إلى تحديد ماكرو إضافي لكل إعداد نريد استخلاصه.