تحقق من وجود عملية Office معلقة عند استخدام Office Automation

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

سؤال

هل هناك طريقة للتحقق لمعرفة ما إذا كانت عملية Microsoft Office (أي.هل تم تعليق Word وExcel) عند استخدام Office Automation؟بالإضافة إلى ذلك، إذا تم تعليق العملية، فهل هناك طريقة لإنهائها؟

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

المحلول

اسمحوا لي أن أبدأ بالقول إنني لا أوصي بالقيام بذلك في خدمة موجودة على الخادم، ولكنني سأبذل قصارى جهدي للإجابة على الأسئلة.

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

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

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

فيما يلي بعض الأوامر التي يمكنك استخدامها في ملف دفعي للتنظيف (يجب أن يكون كلاهما في المسار):

  • sc stop Servicename - إيقاف الخدمة المسماة اسم الخدمة
  • sc start اسم الخدمة - يبدأ الخدمة المسماة اسم الخدمة
  • اسم خدمة استعلام sc - يستعلم عن حالة اسم الخدمة

  • Taskkill /F /IM excel.exe - ينهي كافة مثيلات excel.exe

نصائح أخرى

أتذكر أنني قمت بذلك قبل بضع سنوات - لذا فأنا أتحدث عن Office XP أو أيام 2003، وليس 2007.

من الواضح أن الحل الأفضل للأتمتة هذه الأيام هو استخدام تنسيق XML الجديد الذي يصف docx وما إلى ذلك باستخدام مساحة الاسم System.IO.Packaging.

في ذلك الوقت، اعتدت أن ألاحظ أنه كلما مات برنامج MSWord واكتفى، ظهرت عملية تسمى "Dr.Watson" كان يعمل على الجهاز.كان هذا أول دليل لي على أن Word قد تعثر وسقط.في بعض الأحيان قد أرى أكثر من واحد WINWORD.EXE, لكن الكود الخاص بي يستخدم فقط للبحث عن الطبيب الجيد.بمجرد أن رأيت ذلك (في الكود)، قتلت الجميع WINWORD.EXE يعالج الطبيب الجيد بنفسه، ويستأنف عملية تعذيب الكلمة :-)

نأمل أن يوفر لك بعض الأدلة حول ما الذي تبحث عنه.

أتمنى لك كل خير،

روب ج

ملاحظة.قد أكون قادرًا على استخراج الكود الموجود في أرشيفاتي إذا لم تأت بشكل صحيح!

أستطيع الإجابة على النصف الأخير.إذا كان لديك مرجع لكائن التطبيق في التعليمات البرمجية الخاصة بك، فيمكنك ببساطة استدعاء "Quit" عليه:

private Microsoft.Office.Interop.Excel.Application _excel;
// ... do some stuff ...
_excel.Quit();

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

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