2010-08-04 8 views
8

लटका हुआ है मेरे पास सी # में एक विंडोज सेवा है जो वीबीए इंटरऑप का उपयोग कर शब्द दस्तावेज़ (डॉक्टर और डॉक्क्स) से पाठ पढ़ती है। हालांकि कुछ दस्तावेजों पर यह ओपन विधि पर कॉल पर लटका हुआ प्रतीत होता है। ऐसा लगता है कि समस्या दस्तावेजों में सभी में मैक्रोज़ हैं। शब्द के स्थानीय स्तर पर स्थापित संस्करण मैक्रो विकलांग है और कोड मैं खोलने के लिए दस्तावेज़ इस प्रकार है का उपयोग करें:विंडोज सेवा में एक माइक्रोसॉफ्ट वर्ड दस्तावेज़ खोलना

using Word = Microsoft.Office.Interop.Word; 
using OfficeCore = Microsoft.Office.Core; 

Word.Application m_wordApp = new Word.ApplicationClass(); 
Word.Document m_wordDoc = null; 

object TRUE_VALUE = true; 
object FALSE_VALUE = false; 
object MISSING_VALUE = System.Reflection.Missing.Value; 

m_wordApp.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone; //will still fail with this line removed 
m_wordApp.Visible = false; //will still fail with this line removed 
m_wordApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable; //will still fail with this line removed 
m_wordDoc = m_wordApp.Documents.Open(ref fileNameObject, ref FALSE_VALUE, ref TRUE_VALUE, ref FALSE_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref FALSE_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE); 

मैं अपने विकासशील मशीन पर मैन्युअल रूप से इन दस्तावेजों पर कार्रवाई कर सकते हैं। क्या किसी को पता है कि यह क्यों हो रहा है या मेरे प्रश्न के बारे में कोई और सवाल है?

+2

मैक्रोज़ के लिए उत्पादन मशीन प्रॉम्प्ट पर वर्ड का संस्करण, या चुपचाप उन्हें अक्षम करता है? –

+0

क्या होता है जब आप कोड को नियमित कंसोल एप्लिकेशन में डालते हैं और उत्पादन मशीन पर निष्पादित करते हैं? क्या कुछ संवाद पॉप अप करते हैं? – Heinzi

+0

एमके - शब्द चुपचाप मैक्रोज़ को निष्क्रिय करना चाहिए। मुझे वर्ड ट्रस्ट सेंटर में "अधिसूचना के बिना सभी मैक्रोज़ अक्षम करें" विकल्प से मेल खाता है और यह सेट करता है कि उपयोगकर्ता के लिए सेवा चलती है लेकिन इसने समस्या को ठीक नहीं किया है –

उत्तर

4

मैं उम्मीद है कि अंत में मिल गया है इस से संबंधित सभी मुद्दों और दस्तावेज़ को खोलने के लिए निम्न पंक्ति के साथ समाप्त हो गया है:

m_wordApp.Documents.Open(ref fileNameObject, ref FALSE_VALUE, ref TRUE_VALUE, ref FALSE_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref FALSE_VALUE, ref TRUE_VALUE, ref MISSING_VALUE, ref TRUE_VALUE, ref MISSING_VALUE); 

4 और 2 पिछले मापदंडों खोलने से मरम्मत और एन्कोडिंग संवाद को रोकने के जो अधिकांश त्रुटियों को ठीक किया गया।

सूचना के बिना अक्षम मैक्रोज़ चालू करने के लिए रजिस्ट्री कुंजी है:

[HKEY_USERS\S-x-x-xx-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-xxx\Software\Microsoft\Office\12.0\Word\Security] 
"VBAWarnings"=dword:00000004 

अंत में, सब के बाद कि वहाँ अभी भी डॉक्स कि सेवा दुर्घटनाग्रस्त हो गई और winword उदाहरणों लीक थे। सेवा उपयोगकर्ता के रूप में लॉग इन करने और इन दस्तावेज़ों में से किसी एक को खोलने के बाद मुझे यह संदेश शब्द से मिला: "शब्द कनवर्टर mswrd632 शुरू नहीं कर सकता"। http://support.microsoft.com/kb/973904 में बताए गए अनुसार रजिस्ट्री कुंजी को हटाकर यह तय किया गया है।

संपादित करें: मैंने यह भी पाया कि क्योंकि वीबीए स्थापित नहीं किया गया था, इस शब्द ने सेवा को बताने के लिए एक संवाद खोला जिससे इसने कुछ दस्तावेजों को सेवा लटका दिया। इसके बाद इसे फिर से स्थापित करना हालांकि वर्ड स्वयं (जैसा कि ऊपर बताया गया है) को कुछ और दस्तावेज़ प्रसंस्करण मिल गया है। अभी भी कुछ दस्तावेज जिन्हें संसाधित नहीं किया जा सकता है। इसके बजाय दस्तावेज़ों को पार्स करने के लिए ikvmc के साथ http://poi.apache.org/text-extraction.html को आजमाने का विचार करना।

5

Microsoft.Office.Interop.Word वास्तविक शब्द निष्पादन योग्य को दूरस्थ रूप से नियंत्रित करने के लिए एक COM wrapper का उपयोग करता है। यह बिल्कुल भयानक है। वर्ड की प्रतिलिपि में मैक्रोज़ को अक्षम करने की सेटिंग लगभग निश्चित रूप से एक उपयोगकर्ता विशिष्ट सेटिंग है और विंडोज सेवा वर्ड चलाएगी क्योंकि जो भी उपयोगकर्ता खाता सेवा चल रहा है। संभावना है कि यह अनिवार्य रूप से कुछ सैद्धांतिक नेटहेवरवर्ल्ड में कुछ प्रकार के मैक्रो सुरक्षा संवाद को पॉप अप कर रहा है जो विंडोज सेवा उपयोगकर्ता डेस्कटॉप/यूई है।

+0

मुझे वर्ड ट्रस्ट सेंटर में "अधिसूचना के बिना सभी मैक्रोज़ अक्षम करें" विकल्प से मेल खाता है और यह सेट करता है कि उपयोगकर्ता के लिए सेवा चलती है लेकिन यह स्थिति सही नहीं है –

2

माइक्रोसॉफ्ट द्वारा सर्वर-साइड ऑटोमेशन के खिलाफ सिफारिशें हैं, लेकिन अगर आप अभी भी ऐसा करने जा रहे हैं तो आपकी मदद करने के लिए बहुत सारे संसाधन भी हैं।

हालांकि, अगर यह रूप में सरल रूप में अपने दस्तावेज़ों क्योंकि किसी भी AutoMacros की फांसी रहे हैं, AutoOpen की तरह: इन दो लेख आप पर्याप्त पृष्ठभूमि क्या के लिए खाते में देना चाहिए , वीबीए कोड के पीछे, आपको इन्हें अक्षम करने के लिए वर्डबेसिक का उपयोग करने की आवश्यकता होगी। मैं इसे सी # में काम करने के लिए कभी नहीं मिला, लेकिन मैंने वीबी.नेट में किया। How to open document that contains AutoOpen macro with PowerShell?

अंतिम विकल्प सर्वर-साइड ऑफिस ऑटोमेशन के लिए बनाया गया टूल पर विचार करना होगा, जैसे Apose.Words

2

शब्द दस्तावेज़ के साथ मामूली समस्या होने पर उपयोगकर्ता को संकेत देगा। यह संकेत आपके मामले में सेवाओं के लिए डेस्कटॉप पर प्रदर्शित किया जाएगा, जहां कोई भी इसे चिल्ला नहीं सकता है। और ओपन() विधि कॉल को पूरा करने से रोक रहा है।

ओपन() विधि के ओपन एंडरपेयर तर्क को सही पर सेट करना सुनिश्चित करें ताकि उपयोगकर्ता को संकेत दिए बिना स्वचालित रूप से इसका सामना किया जा सके।

+0

मैंने खुला और मरम्मत बहस सेट की है TRUE_VALUE और अभी भी त्रुटि मिली है। खोलने के लिए कॉल अब m_wordApp.Documents.Open (ref फ़ाइलNameObject, ref FALSE_VALUE, ref TRUE_VALUE, ref FALSE_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MISSING_VALUE, ref MIALING_VALUE, ref FALSE_VALUE, ref TRUE_VALUE, ref MISSING_VALUE, ref TRUE_VALUE, ref MISSING_VALUE) –

+0

आपको कोई त्रुटि मिली है? यह अच्छा है, त्रुटि क्या है? –

+0

हां, खेद है कि किसी त्रुटि के बारे में पोस्ट करते समय कार्डिनल त्रुटि हुई और इसे पोस्ट नहीं किया, 'ओह! मेरे पास यह और नहीं है लेकिन जब मुझे कुछ समय मिलता है तो मैं सभी समस्या दस्तावेजों को संसाधित करने का प्रयास करता हूं, मुझे यकीन है कि मैं इसे फिर से प्राप्त करूंगा। –

2

आप दस्तावेज़ों को कॉल करने का भी प्रयास कर सकते हैं। ओपननो रिपेयरडियलॉग (...) विधि। यह कार्यालय 2007 और बाद में मौजूद है।

ध्यान दें कि मैं सीधे COM कॉल का उपयोग कर रहा हूं, इसलिए मुझे यकीन नहीं है कि यह कार्यालय इंटरऑप libs में मौजूद है।

+0

विधि vsto COM interop dlls में है। मेरे पास कॉन्फ़िगरेशन स्विच है जिसका उपयोग मैं ओपन विधि के बजाय इसे उपयोग करने के लिए सेवा को सक्षम करने के लिए कर सकता हूं, लेकिन इसका उपयोग करते समय भी मुझे किसी भी समस्या को खोलने के लिए दस्तावेज़ नहीं मिल सका। फिलहाल सेवा इसके बिना काफी अच्छी तरह से चल रही है इसलिए मैं कोई बदलाव नहीं कर रहा हूं लेकिन सुझाव के लिए धन्यवाद। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^