سؤال

أقوم بإنشاء مثبت باستخدام 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, ، سيعطي هذا النتائج التي أريدها ، دون الحاجة إلى تحديد ماكرو إضافي لكل إعداد نريد استخلاصه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top