كيف يمكنني تشغيل سلسلة من العمليات في لغة C# والاحتفاظ بإعدادات البيئة الخاصة بها؟

StackOverflow https://stackoverflow.com/questions/136436

سؤال

أقوم بتطوير أداة إنشاء تلقائية ستقوم بتنفيذ سلسلة من الخطوات في عملية الإنشاء لدينا وبناء تطبيقنا المستهدف.اعتدنا على استخدام ملف دفعي يقوم بإعداد مجموعة من متغيرات البيئة أو يسمى الأدوات التي تقوم بإعداد متغيرات البيئة وتشغيل "الإنشاء" في النهاية.

لقد كنت أستخدم فئة "العملية" التي تعمل بشكل رائع لتشغيل هذه الأوامر ولكن لسوء الحظ في كل مرة يتم فيها تشغيل أحد هذه الأوامر لإجراء تغييرات على البيئة (مثل إضافة شيء ما إلى PATH) يتم فقدان هذه المتغيرات عند اكتمال "العملية".يتم إنشاء مثيل "العملية" التالية وترث env من تطبيق "الاتصال" (exe الخاص بي) مرة أخرى - مما يعني فقدان كل إعدادات env بواسطة الأمر الأخير.كيف تتعامل مع هذا الموقف؟هل هناك طريقة أفضل لتشغيل سلسلة من الملفات الدفعية مثل الأوامر داخل C# والحفاظ على البيئة التي قاموا بإعدادها؟

يرجى ملاحظة أنه لسوء الحظ ، أعلن المدارس القديمة أن Nant/Ant ليس خيارًا لذلك "مهلا ، لماذا لا تستخدم NANT - إنها تفعل ذلك!" ليس الجواب الذي أبحث عنه.

شكرًا.

هل كانت مفيدة؟

المحلول

أود أن أقترح بعض التعليمات البرمجية التي من شأنها حفظ متغيرات البيئة الخاصة بك في ملف خارجي، ومن ثم يمكنك استرداد هذه المتغيرات عبر الملف الخارجي في بداية العمليات التالية.

نصائح أخرى

حسنًا، سيتيح لك الأسلوب System.Environment.SetEnvironmentVariable()‎ تحديد نطاق المتغير الذي قمت بتعيينه.هل هذا ما كنت تبحث عنه؟لست متأكدا من أنني أفهم.

نحن نستخدم CruiseControl.net لتشغيل البرنامج النصي NAnt.ينصح به بشده.

يمكن استدعاء البرنامج النصي NAnt باستخدام -D:تبديل سطر الأوامر لتعيين ما يعادل متغيرات البيئة.

أعتقد أن المشكلة ليست في تحديد متغيرات البيئة المخصصة هنا.(يمكنك ضبطها عبر ProcessStartInfo.) تكمن المشكلة في قراءة التغييرات التي تم إجراؤها على متغيرات البيئة من خلال العمليات التي يتم تشغيلها.لست متأكدا إذا كان ذلك ممكنا.الطرق الوحيدة التي أعرفها هي تعيين متغيرات البيئة للعملية نفسها و/أو للعمليات الفرعية الخاصة بها.لا أعرف أي طريقة لتعيين متغيرات البيئة للعملية الأصلية.

لا يتم تعيين متغيرات البيئة أبدًا ولا يمكن تعيينها للعملية الأصلية (*).فقط بالنسبة للعملية الحالية والعمليات التي تنشئها - فهذا جزء من المفهوم.

(*) بصرف النظر عن العبث بالأجزاء الداخلية لنظام التشغيل.

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