سؤال

أنا النامية كلمة أتمتة تطبيق وأنا تواجه مسألة خطيرة غير متوقعة RPC/COM يلقي استثناء

[النظام.InvalidCastException:نيه można rzutować obiektu مودلو COM typu 'System.__ComObject' نا الطباع interfejsu 'Microsoft.مكتب.إمكانية التشغيل المتداخل.كلمة._Application'.تا operacja نيه powiodła się, ponieważ wywołanie metody QueryInterface dla składnika مودلو COM w celu uzyskania interfejsu o identyfikatorze IID '{00020970-0000-0000-C000-000000000046}' نيه powiodło się z powodu następującego błędu:سيروير RPC المزاح niedostępny.(Wyjątek od HRESULT:0x800706BA).]

الترجمة من البولندية إلى اللغة الإنجليزية:

غير قادر على تحويل نظام.__ComObject إلى مايكروسوفت.مكتب.إمكانية التشغيل المتداخل.كلمة._Application.والسبب هو أن QueryInterface على IID '{00020970-0000-0000-C000-000000000046}' فشل ملقم RPC غير متوفر - رمز الخطأ HRESULT:0x800706BA

هنا مختصر من wordapp وحدة:

التهيئة - بعد تسجيل مستخدم.

using Microsoft.Office.Interop.Word;

    public class WordApp       
    {
        Application app = null;
        object m = System.Reflection.Missing.Value; 
        object oFalse = false;  
        object oTrue = true;

....

            app = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application.12")) as Application;
            app.Visible = false;
            app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            app.PrintPreview = false;

أنا باستخدام المنشط.CreateInstance بدلا من التطبيق = تطبيق جديد() - هنا تفسير.

ثم يمكن للمستخدم تنفيذ 2 الإجراءات في wordapp وحدة

أ) طباعة إعداد الوثيقة docx

        System.Windows.Forms.PrintDialog pd = new System.Windows.Forms.PrintDialog();
        ...

        this.app.ActivePrinter = pd.PrinterSettings.PrinterName;
        object oNumcopies = pd.PrinterSettings.Copies;
        object oRange = WdPrintOutRange.wdPrintAllDocument;
        object inputname = fullPath;
        Document doc = app.Documents.Add(
                              ref inputname,
                              ref m,
                              ref m,
                              ref m);
        try
        {
            // Print the document 
            doc.PrintOut(ref oFalse, ref oFalse, ref oRange,
                    ref m, ref m, ref m,
                    ref m, ref oNumcopies, ref m, ref m,
                    ref oFalse, ref m, ref m,
                    ref m, ref m, ref m, ref m,
                    ref m);
        }
        finally
        {
            doc.Close(ref oFalse, ref m, ref m);
            doc = null;
        }

ب) تحويل docx إلى mht

        object inputname = docxname;
        object outputname = htmlname;
        object fileType = WdSaveFormat.wdFormatWebArchive;

        Document doc = app.Documents.Add( 
                              ref inputname,
                              ref m,
                              ref m,
                              ref m);
        try
        {
            doc.SaveAs(ref outputname, ref fileType,
                ref m, ref m, ref m, ref m, ref m, ref m, ref m,
                ref m, ref m, ref m, ref m, ref m, ref m, ref m);
        }
        finally
        {
            doc.Close(ref oFalse, ref m, ref m);
            doc = null;
        }

عندما يقوم المستخدم بتسجيل الخروج ثم أطلق كلمة سبيل المثال:

            object oSaveChanges = WdSaveOptions.wdDoNotSaveChanges;
            app.Quit(
         ref oSaveChanges,
         ref m,
         ref m);

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

لقد وجدت هذا الشيء في سجل الأحداث (نطاق التطبيق):

EventType offdiag12, P1 585d8a02-f370-4c04-85b6-fccad7e80459255ec053-6dbd-4a22-9e59-112a79de8c6a, P2 النيل, P3 النيل, P4 النيل, P5 النيل, P6 النيل, P7 النيل, P8 النيل, P9 النيل, P10 النيل.

لقد مكتب تشغيل التشخيص و لم تجد أي خطأ.

هل هناك وقت ممكن لتمكين / العثور على مزيد من خطأ المعلومات من النظام ؟

هذا الكود يعمل جيدا على ديف الجهاز (ويندوز فيستا).تحدث هذه المشكلة في آلات العملاء (عادة ويندوز إكس بي sp2/sp3).

هل هناك خطأ في التعليمات البرمجية أو ماذا ؟

فقط شيء واحد أنا بحاجة إلى إضافة.WordModule الحرف الأول/إغلاق/وظائف الطباعة تسمى من الترابط الرئيسي و savetomht من backgroundworkders' الموضوع.

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

المحلول

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

لديك للبحث والقضاء على السبب من خادم COM الإنهاء.الأسباب الأكثر احتمالا هي التالية:

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

نصائح أخرى

أنا لا أعرف, ولكن هنا بعض الاقتراحات استنادا إلى التجربة العامة.قد تحاول استخدام متميزة m s بدلا من مشاركة واحدة بين جميع المعلمات (على فكرة أنه إذا كانت القيمة تلهو مع أنه يمكن أن يكون لها نتائج غير متوقعة).قد تحتاج أيضا إلى محاولة توفير قيم معقولة (بدلا من m s) أينما كنت تستطيع.بعض الإصدارات من API قد تكون أكثر تسامحا من غيرها.

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