يقوم ActiveXObject الجديد ('Word.Application') بإنشاء عملية WINWORD.EXE جديدة عندما لا يسمح الأمن في أي كائن

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

سؤال

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

البرنامج النصي الذي نستخدمه يخلق كائن كلمة ويغلقه بعد ذلك. أثناء وجود الكائن، يعمل عملية Winword.exe، ولكن يتم تدميره عند إغلاق كائن الكلمة.

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

المكالمة التي تحاول إنشاء الكائن هي ...

try {
      wordApplication = new ActiveXObject('Word.Application');
} catch(error) {
      // irrelevant code removed, described in comments..
      // notify user spell check cannot be used
      // disable spell check option
}

لذلك في كل مرة يتم تحميل الصفحة، قد يتم تشغيل هذا الرمز مرة أخرى، مما يؤدي إلى إنشاء عملية Winword.exe الأخرى.

wordApplication هو، بالطبع، غير محدد في كتلة الصيد.

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

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

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

قبل أن أضعها جانبا، اعتقدت أنني سأطلب اقتراحات هنا.

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

المحلول

لم أجد إجابة على هذه المشكلة، وأنا منزعجة عند التعرف على المشكلة حول أمان Internet Explorer (لقد نسيت أن أذكر في منشورتي السابقة الإصدار الذي أستخدمه: IE 7.)

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

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

try { 
    oMSInfo = new ActiveXObject('Msinfo32.MSInfo.1');
} catch (error) {
    //  error handling code not shown...
    return;
}

لا يبدأ هذا الكائن عملية جديدة عند فشل المكالمة إلى ActiveXObject جديدة (). كما أنه ليس له تأثير ملحوظ على موارد النظام.

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