كيف يمكنني معرفة متى تم تشغيل .Net System.Diagnostics.Process بنجاح أو فشل؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أكتب جدولة أو نوعا ما.إنه في الأساس جدول يحتوي على قائمة بالملفات exes (مثل "C:\a.exe") وتطبيق وحدة تحكم يبحث في السجلات الموجودة في الجدول كل دقيقة أو نحو ذلك ويقوم بتشغيل المهام التي لم يتم تشغيلها بعد.

أقوم بتنفيذ المهام مثل هذا:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = someExe; // like "a.exe"
p.Start();

كيف يمكنني معرفة ما إذا فشلت مهمة معينة؟على سبيل المثال، ماذا لو قام ملف a.exe بإلقاء استثناء غير معالج؟أود أن يعرف الكود أعلاه متى يحدث ذلك وأن يقوم بتحديث جدول المهام بشيء مثل "فشلت المهمة المحددة" وما إلى ذلك.

كيف يمكنني أن أفعل هذا؟

أنا لا أستخدم وكيل Sql أو برنامج جدولة Windows لأن شخصًا آخر طلب مني عدم القيام بذلك.لديه المزيد من "الخبرة" لذا فأنا أتبع الأوامر فقط.لا تتردد في اقتراح البدائل.

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

المحلول

يمكنك التقاط Win32Exception للتحقق مما إذا العملية.ابدأ() فشل بسبب عدم وجود الملف أو تم رفض الوصول إلى التنفيذ.

لكن لا يمكنك اكتشاف الاستثناءات التي تطرحها العمليات التي تقوم بإنشائها باستخدام هذه الفئة.في المقام الأول، قد لا يكون التطبيق مكتوبًا بـ .NET، لذلك قد لا يكون هناك مفهوم الاستثناء على الإطلاق.

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

نصائح أخرى

وأعتقد كنت تبحث عن Process.ExitCode، على افتراض أن عملية بإرجاع أحد. قد تحتاج إلى استخدام WaitForExit على الرغم من (). وهناك أيضا حدث ErrorDataReceived التي يتم تشغيلها عندما يرسل التطبيق لستدير.

وبالإضافة إلى ExitCode، يمكنك أيضا القيام بشيء من هذا القبيل:

string output = p.StandardOutput.ReadToEnd();

وهذا سوف التقاط كل ما من شأنه تم كتابتها إلى إطار الأوامر. ثم هل يمكن تحليل هذه السلسلة لالأنماط المعروفة لعرض الأخطاء، وهذا يتوقف على التطبيق.

لتوسيع على ما قالjop. سوف تحتاج أيضا إلى الانتظار لعملية لإغلاق. وهكذا:

        p.Start();
        p.WaitForExit();
        int returnCode = p.ExitCode;

ورموز غير الصفر وعادة ما تكون أخطاء. استخدام بعض التطبيقات السلبية هي الأخطاء، ومنها إيجابية رموز الحالة / التحذيرات.

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