أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

لا يتم إنهاء تطبيق office بعد أتمتة من Visual Studio.net العميل

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

اضغط هنا لرابط المقالة باللغة الانجليزية317109
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
عند أتمتة أحد تطبيقات Microsoft Office من .NET Visual Basic Microsoft أو Microsoft Visual C#.net، تطبيق Office لا يتم إنهاء متى استدعاء الأسلوب Quit .
السبب
عندما كائن المكالمات Visual Studio.net COM من مدارة التعليمات البرمجية، تقوم تلقائياً بإنشاء وقت التشغيل الاستدعاء المجمع (RCW). RCW حراس المكالمات بين التطبيق.net وكائن COM. يحتفظ RCW عدد مرجع كائن COM. ولذلك، إذا لم تكن كافة المراجع تم إصدارها بتاريخ RCW، كائن COM لا بالإنهاء.
الحل
للتأكد من إنهاء تطبيق Office، تأكد أن التعليمات البرمجية "التنفيذ التلقائي" يحقق المعايير التالية:
  • تعريف كل كائن كمتغير جديد. على سبيل المثال، تغيير السطر التالي من التعليمات البرمجية
    oBook = oExcel.Workbooks.Add()					
    لما يلي:
    dim oBooks as Excel.WorkbooksoBooks = oExcel.WorkbooksoBook = oBooks.Add()					
  • استخدام System.Runtime.InteropServices.Marshal.ReleaseComObject في حلقة حتى تقوم بإرجاع 0 عند الانتهاء من استخدام كائن. علامة System.Runtime.InteropServices.Marshal.ReleaseComObject إنقاص عدد مرجع RCW، وفي الحلقة سيتم التأكد من أن مكون COM الأساسي هو بغض النظر عن كيف مرات عديدة وقد دخلت CLR.
  • لإطلاق الإشارة إلى المتغير، قم بتعيين متغير يساوي لا شيء أو Null.
  • استخدام قم بإنهاء أسلوب للكائن تطبيق Office لإعلام الملقم إلى إيقاف تشغيل.
تصريح
وهذا السلوك حسب التصميم.
معلومات أخرى

خطوات إعادة إنشاء السلوك

  1. بدء تشغيل Visual Studio.net.
  2. من القائمة ملف ، انقر فوق جديد ومن ثم انقر فوق المشروع. ضمن مشاريع Visual Basic، حدد تطبيق Windows وانقر فوق موافق. يتم إنشاء Form1 بشكل افتراضي.
  3. قم بإضافة مرجع إلى كائن Microsoft Excel مكتبة. للقيام بذلك، اتبع الخطوات التالية:
    1. من القائمة المشروع انقر فوق إضافة مرجع.
    2. ضمن علامة التبويب " COM "، تحديد موقع "مكتبة كائنات" ل Excel، ومن ثم انقر فوق تحديد.

      لبرنامج Microsoft Excel 2002: مكتبة كائنات Microsoft Excel 10.0

      ملاحظة إذا التي لم تفعل ذلك، فمن المستحسن أن تقوم تحميل وتثبيت Microsoft Office XP الأساسية إمكانية التشغيل المتداخل التجميعات (PIAs). للحصول على معلومات إضافية حول Office XP PIAs، انقر فوق رقم المقالة التالي لعرض المقالة في قاعدة معارف Microsoft:
      328912Microsoft Office XP تجميعات التوافق الأساسية (PIAs) غير متوفرة للتحميل
      مكتبة كائنات Microsoft Excel 11.0 ل Microsoft Office Excel 2003:
    3. انقر فوق موافق في مربع الحوار إضافة مراجع لقبول التحديدات.
  4. من القائمة عرض ، انقر فوق مربع الأدوات، ومن ثم اسحب عنصر تحكم زر إلى Form1.
  5. انقر نقراً مزدوجاً فوق Button1. يظهر إطار التعليمات البرمجية للنموذج.
  6. إضافة التعليمة البرمجية التالية إلى أعلى Form1.vb:
    Imports Microsoft.Office.Interop					
  7. استبدال التعليمة البرمجية التالية في إطار التعليمات البرمجية
        Private Sub Button1_Click(ByVal sender As System.Object, _       ByVal e As System.EventArgs) Handles Button1.Click    End Sub					
    بما يلي:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click    Dim oApp As New Excel.Application()    Dim oBook As Excel.Workbook = oApp.Workbooks.Add    Dim oSheet As Excel.Worksheet = oApp.ActiveSheet    oSheet = Nothing    oBook.Close(False)    oBook = Nothing    oApp.Quit()    oApp = Nothing    Debug.WriteLine("Sleeping...")    System.Threading.Thread.Sleep(5000)    Debug.WriteLine("End Excel")End Sub					
  8. اضغط F5 لتشغيل التطبيق.
  9. افتح إدارة مهام Windows. في Visual Studio، عرض إطار الإخراج لمشاهدة رسائل التصحيح. انقر فوق زر الأمر ولاحظ أن يظهر مثيل Excel.exe في قائمة العمليات .
  10. المثيل من Excel لا يزال يعمل في قائمة المهام حتى بعد انتهاء التطبيق النوم. إغلاق مربع الحوار ولاحظ أن لم يعد يظهر Excel في قائمة العمليات .
  11. عند تنفيذ الخطوات المذكورة في قسم "الحل"، إنهاء تطبيق Office بعد ذلك إصدارات المتغير الأخير. استبدال الدالة في الخطوة 5 مع التعليمات البرمجية التالية:
      Private Sub NAR(ByVal o As Object)    Try      While (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0)      End While    Catch    Finally      o = Nothing    End Try  End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click    Dim oApp As New Excel.Application()    Dim oBooks As Excel.Workbooks = oApp.Workbooks    Dim oBook As Excel.Workbook = oBooks.Add    Dim oSheet As Excel.Worksheet = oApp.ActiveSheet    NAR(oSheet)    oBook.Close(False)    NAR(oBook)    NAR(oBooks)    oApp.Quit()    NAR(oApp)    Debug.WriteLine("Sleeping...")    System.Threading.Thread.Sleep(5000)    Debug.WriteLine("End Excel")End Sub					
إذا كنت تستخدم Visual C#.net، الإشارة إلى رمز للدالة NAR() :
private void NAR(object o){    try     {        while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) ;    }    catch {}    finally     {        o = null;    }}
ملاحظة: بدءاً من.net Framework 2.0، يمكنك استخدام System.Runtime.InteropServices.Marshal.FinalReleaseComObject بدلاً من أثناء تنفيذ حلقة مستمرة استدعاء System.Runtime.InteropServices.Marshal.ReleaseComObject لتحقيق نفس النتيجة.

استكشاف الأخطاء وإصلاحها

لاحظ أنه في حالة اتباع الخطوات الموضحة في القسم "خطوات للقيام بإعادة إنتاج السلوك" والخادم لا يزال لا يغلق إلى الأسفل، يمكنك استخدام GC.Collect()GC والأسلوب.WaitForPendingFinalizers() الأسلوب بعد إطلاق كائن آخر. لأن وقت التشغيل يقوم بتجميع البيانات المهملة على RCW GC.Collect() يفرض حاوي لتشغيل الأسلوب ويمكن الكشف عن أي مراجع RCW ما زال لديه. GC.Collect() يحاول الأسلوب لاستعادة الحد الأقصى للذاكرة المتوفرة. لاحظ أن هذا لا يضمن أنه سيتم استخلاص كل الذاكرة.
gc.collect ريلياسيكوموبجيكت; فينالريليسكوموبجيكت

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 317109 - آخر مراجعة: 12/07/2015 08:49:00 - المراجعة: 1.0

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbautomation kbprb kbmt KB317109 KbMtar
تعليقات