Sunday 18 March 2018

عملية ويتوفوريكسيت مهلة قتل


بروسيس ويتفوريكسيت تيم أوت كيل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
كيف يمكنني قتل عملية باستخدام ف أو C #؟
لدي سيناريو حيث يجب أن تحقق ما إذا كان المستخدم قد فتح بالفعل مايكروسوفت وورد. إذا كان لديه، ثم لا بد لي من قتل عملية winword. exe والاستمرار في تنفيذ التعليمات البرمجية.
هل لدى أي شخص أي رمز مستقيم لقتل عملية باستخدام ف أو ج #؟
На этот вопрос есть ответы на كومة أوفيرفلو на русском: Убить процесс в C #
وقد تم نشر الأمثلة هنا، ولكنني وجدت أن الإصدار غير. exe عملت بشكل أفضل، لذلك شيء من هذا القبيل:
ربما لم يكن لديك للتعامل مع نوتسوبورتيدكسيبتيون، مما يوحي بأن العملية بعيدة.
قتل عملية ورد بشكل واضح ممكن (انظر بعض الردود الأخرى)، ولكن وقحا تماما وخطيرة: ماذا لو كان المستخدم لديه تغييرات هامة لم يتم حفظها في وثيقة مفتوحة؟ ناهيك عن الملفات المؤقتة القديمة التي سوف تترك وراءها.
هذا هو على الارجح بقدر ما يمكنك الذهاب في هذا الصدد (ف):
سيؤدي ذلك إلى إغلاق جميع نوافذ ورد المفتوحة بطريقة منظمة (مما يدفع المستخدم إلى حفظ عمله / عمله إذا كان ذلك ممكنا). بالطبع، يمكن للمستخدم دائما النقر فوق "إلغاء" في هذا السيناريو، لذلك يجب أن تكون قادرة على التعامل مع هذه الحالة كذلك (ويفضل أن يكون عن طريق وضع "يرجى إغلاق كافة الحالات ورد، وإلا لا يمكننا الاستمرار" الحوار.)
هنا هو مثال سهل لكيفية قتل جميع عمليات كلمة.
يمكنك تجاوز المخاوف الأمنية، وإنشاء تطبيق بوليتير بكثير ببساطة عن طريق التحقق من ما إذا كان عملية ورد قيد التشغيل، وطلب من المستخدم لإغلاقه، ثم انقر فوق زر "متابعة" في التطبيق الخاص بك. هذا هو النهج الذي اتخذته العديد من التركيب.
بالطبع، يمكنك القيام بذلك فقط إذا كان التطبيق يحتوي على واجهة المستخدم الرسومية.
في بلدي درج التطبيق، كنت بحاجة لتنظيف إكسل و ورد إنتيروبس. لذلك هذه الطريقة البسيطة تقتل العمليات بشكل عام.
يستخدم هذا معالج استثناء عام، ولكن يمكن تقسيمها بسهولة لاستثناءات متعددة مثل المذكورة في إجابات أخرى. قد أفعل هذا إذا كان تسجيل بلدي تنتج الكثير من الايجابيات كاذبة (أي لا يمكن أن تقتل قتل بالفعل). ولكن حتى الآن حتى التوجيه (نكتة العمل).
هذه هي الطريقة التي اتصلت بها بعد ذلك:
شيء من هذا القبيل سيعمل:
انها أفضل الممارسات وأكثر أمانا وأكثر مهذبا للكشف إذا كانت العملية قيد التشغيل وأخبر المستخدم لإغلاقه يدويا. بالطبع يمكنك أيضا إضافة مهلة وقتل العملية إذا كانت قد ذهبت بعيدا.

بروسيس ويتفوريكسيت تيم أوت كيل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
كيفية استخدام Process. WaitForExit.
أنا استدعاء التطبيق الجزء الثالث الذي "أحيانا" يعمل في ف (انها وف استضافت النفس). ولكن في بعض الأحيان سوف 3rd الطرف التطبيق شنق إلى الأبد، لذلك لقد أضفت الموقت 90 ثانية لذلك. المشكلة هي، كيف أعرف ما إذا كان الوقت مهلة؟
يبدو الرمز كما يلي:
ما أود القيام به هو شيء من هذا القبيل.
تحقق من قيمة طريقة العودة - msdn. microsoft/en-us/library/ty0d8k56.aspx - إذا انتهت المهلة، فإنه سيعود خطأ.
كانت هناك مشاكل معروفة في الماضي حيث التطبيقات تجميد عند استخدام ويتفوريكسيت.

بروسيس ويتفوريكسيت تيم أوت كيل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
c # ProcessStartInfo. Start - إخراج القراءة ولكن مع مهلة.
إذا كنت تريد بدء عملية أخرى وانتظر (مع مهلة) لإنهاء يمكنك استخدام ما يلي (من مسن).
إذا كنت ترغب في بدء عملية أخرى وقراءة مخرجاتها ثم يمكنك استخدام النمط التالي (من سو)
كيف يمكنك الجمع بين اثنين لقراءة جميع المدخلات، لا تتعثر في حالة توقف تام ولها مهلة إذا كان تشغيل العملية يذهب أوري؟
وهذه التقنية شنق إذا تم تعبئة المخزن المؤقت الإخراج مع أكثر من 4KB من البيانات. وهناك طريقة أكثر مضمونة لتسجيل المندوبين ليتم إعلامك عندما يتم كتابة شيء إلى تيار الإخراج. لقد اقترحت هذه الطريقة من قبل في مشاركة أخرى:
ليس لديك إلى الجمع بين اثنين - فئة العملية لديه الحدث الذي ينطلق عندما يتم إرسال الإخراج إلى ستانداردوتبوت - أوتبوتداتاريسيفد.
إذا قمت بالاشتراك في الحدث، سوف تكون قادرا على قراءة الإخراج كما يصل وفي حلقة البرنامج الرئيسي الخاص بك لا يزال بإمكانك مهلة.
يمكنك محاولة تعديل الطريقة الأولى إلى شيء من هذا القبيل.
يمكنك أيضا استخدام عبم، مثل هذا:
تعريف مندوب لمكالمة ريادتويند:
ثم استخدم المندوب للاتصال بالطريقة التالية:
إديت: تمت معالجة الخطأ إزالته للتوضيح.
فقط قم بإضافة كل شيء من المثال الأول أسفل استدعاء ويتفوريكسيت () إلى المثال الثاني.

بروسيس ويتفوريكسيت تيم أوت كيل
لدي التعليمات البرمجية التالية في طلبي:
System. Diagnostics. Process بروك = نيو System. Diagnostics. Process ()؛
بمجرد استدعاء هذا من خلال تطبيق آخر عملية معلقة.
ثم أعطيت مهلة من 5 ثوان والآن يعمل بشكل جيد. ولكن أنا بحاجة إلى إيجاد طريقة أفضل لتحديد هذه المشكلة حيث أن هذه القيمة مهلة يمكن أن تعتمد على موارد النظام وكمية من مدخلات التطبيق لديه لمعالجة.
لذا، سؤالي هو إذا كنا نقوم بإنشاء عملية باستخدام System. Diagnostics، لا أوس إنشاء مؤشر ترابط منفصل وجعله الموضوع الأساسي أو مؤشر ترابط واجهة المستخدم؟
أو هو إنشاء موضوع كلر الذي هو نفسه System. Threading. Thread؟
إذا استخدمنا موضوع تجمع لإنشاء مؤشر ترابط عامل، أن يكون هذا الخيار أفضل؟
هل يستخدم تجمع الترابط جدولة وضع المستخدم؟
نقدر مساعدتكم في هذا الشأن.
أنا بحاجة إلى معرفته عن ذلك لأنه إذا System. Diagnostics يخلق أيضا موضوع الخلفية أو عامل الموضوع، أي نقطة إنشاء موضوع منفصل مرة أخرى كما لن يكون هناك أي تغيير في نهاية اليوم.
ما هو الفرق بين التنفيذ أعلاه على إنشاء مؤشر ترابط الخلفية؟
كنت مربكا المواضيع الداخلية والخارجية إلى التطبيق الخاص بك. إذا كنت تستخدم ويتفوريكسيت على مؤشر ترابط واجهة المستخدم. فإنه سيتم حظر مؤشر ترابط واجهة المستخدم مما يجعلها غير مستجيبة. إذا كان هذا مشكلة، تفرخ العملية الجديدة في الحدث دوورك من باكغروندوركر. عند خروج العملية، سيتم تشغيل رونوركركومبليتيفنت، وتنبيه مؤشر ترابط واجهة المستخدم الخاص بك.
وضع علامة كجواب من قبل مين تشو فريق وحدات مايكروسوفت، مشرف الاثنين، 18 يوليو 2011 3:10 ص.
جميع الردود.
في انتظار حدث مع إنابليرايسينجيفنتس = كاذبة يعني أنك تستخدم ويتفوريكسيت كموقت. تعيينه إلى قيمة مناسبة.
في انتظار حدث مع إنابليرايسينجيفنتس = كاذبة يعني أنك تستخدم ويتفوريكسيت كموقت. تعيينه إلى قيمة مناسبة.
لقد أعطيت 5000 كقيمة وثابت المشكلة. قلبي هو أنها سوف تعمل مماثلة تحت مختلف موارد النظام، حجم المحتوى المدخلات الخ؟
ماذا سيحدث إذا لم يتم إنهاء العملية المرتبطة بنهاية الفاصل الزمني؟
ويندوز ليس نظام التشغيل في الوقت الحقيقي، لذلك أي توقيت سوف تعتمد على جدولة نظام التشغيل. من المفترض، و System. Timers. Timer هو الأكثر دقة.
& كوت؛ ماذا سيحدث إذا لم يتم إنهاء العملية المقترنة بحلول نهاية الفاصل الزمني؟ & كوت؛ لقد عطلت هذه الميزة. إذا كان هذا هو ما تحاول القيام به، تمكينه. إذا كنت لا تريد حظر مؤشر الترابط الذي استخدمته لبدء العملية، ابدأ تشغيله من مؤشر ترابط الخلفية. و باكغسروندوركر يكون مناسبا لهذا.
أنا بحاجة إلى معرفته عن ذلك لأنه إذا System. Diagnostics يخلق أيضا موضوع الخلفية أو عامل الموضوع، أي نقطة إنشاء موضوع منفصل مرة أخرى كما لن يكون هناك أي تغيير في نهاية اليوم.
ما هو الفرق بين التنفيذ أعلاه على إنشاء مؤشر ترابط الخلفية؟
أنا بحاجة إلى معرفته عن ذلك لأنه إذا System. Diagnostics يخلق أيضا موضوع الخلفية أو عامل الموضوع، أي نقطة إنشاء موضوع منفصل مرة أخرى كما لن يكون هناك أي تغيير في نهاية اليوم.
ما هو الفرق بين التنفيذ أعلاه على إنشاء مؤشر ترابط الخلفية؟
كنت مربكا المواضيع الداخلية والخارجية إلى التطبيق الخاص بك. إذا كنت تستخدم ويتفوريكسيت على مؤشر ترابط واجهة المستخدم. فإنه سيتم حظر مؤشر ترابط واجهة المستخدم مما يجعلها غير مستجيبة. إذا كان هذا مشكلة، تفرخ العملية الجديدة في الحدث دوورك من باكغروندوركر. عند خروج العملية، سيتم تشغيل رونوركركومبليتيفنت، وتنبيه مؤشر ترابط واجهة المستخدم الخاص بك.
وضع علامة كجواب من قبل مين تشو فريق وحدات مايكروسوفت، مشرف الاثنين، 18 يوليو 2011 3:10 ص.
تقوم ميكروسوفت بإجراء استطلاع عبر الإنترنت لفهم رأيك لموقع مسن على الويب. إذا اخترت المشاركة، سيتم تقديم الاستبيان عبر الإنترنت لك عند مغادرة موقع مسن على ويب.

No comments:

Post a Comment