मेरे पास एक .net प्रोग्राम है जो मानक Microsoft.Office.Interop.Excel लाइब्रेरी का उपयोग करके एक्सेल स्प्रेडशीट के साथ इंटरैक्ट करता है। प्रोग्राम एक फ़ाइल पथ को कमांड-लाइन तर्क के रूप में लेता है, और यह अपने आप ठीक चलता है।

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

यह निष्पादन ठीक से शुरू होता है, लेकिन एक बार एक्सेल प्रोग्राम फ़ाइल को खोलने का प्रयास करता है:

wb = excel.Workbooks.Open(FileName);

यह निम्न त्रुटि के साथ दुर्घटनाग्रस्त हो जाता है:

System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC
   at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)

ध्यान दें कि कोड अपने आप ठीक चलता है, लेकिन जब प्रोग्राम को विंडोज सेवा द्वारा बुलाया जाता है, तो यह विफल हो जाता है।

मैंने इस मुद्दे की बहुत खोज की है, लेकिन मुझे जो भी समाधान मिले हैं, उनमें से कोई भी मेरे मामले पर लागू नहीं होता है। विशेष रूप से, मैंने घटक सेवाओं को बदलने की कोशिश की है (इस पोस्ट के अनुसार), लेकिन मेरे DCOM कॉन्फिग में कोई एक्सेल कंपोनेंट नहीं है।

कोई भी सुझाव अति सराहनीय है!

1
Benjamin Braun 22 जुलाई 2019, 20:18

1 उत्तर

सबसे बढ़िया उत्तर

त्रुटि कोड 0x800A03EC (या -2146827284) का अर्थ है NAME_NOT_FOUND; दूसरे शब्दों में, आपने कुछ मांगा है, और एक्सेल इसे नहीं ढूंढ सकता है।

बस एक विचार: क्या आप एप्लिकेशन के इंस्टॉलेशन पथ से संबंधित एक्सेल फ़ाइल खोलने का प्रयास कर रहे हैं? ध्यान रखें, विंडोज़ सेवा चलाते समय, कार्यशील निर्देशिका वही नहीं होती है जहाँ अनुप्रयोग स्थापित है।

सर्विस कंट्रोल मैनेजर नामक एप्लिकेशन से सेवाएं शुरू की जाती हैं। यह एप्लिकेशन सिस्टम निर्देशिका %WinDir%\System32 . में रहता है

इसलिए, यदि आप कंसोल से अपना एप्लिकेशन प्रारंभ करते हैं, तो कार्यशील निर्देशिका उस निर्देशिका के समान होती है जहां आपका एप्लिकेशन इंस्टॉल होता है। यदि एक्सेल फ़ाइल एक स्थानीय फ़ाइल है, या एप्लिकेशन के इंस्टॉलेशन पथ के सापेक्ष है, तो यह ठीक चलेगी। हालांकि, विंडोज़ सेवा के रूप में चलने पर, यह फ़ाइल को %WinDir%\System32 निर्देशिका से या सापेक्ष पथ में ढूंढेगा।

यदि उपरोक्त मामला है, तो एक पूर्ण पथ का उपयोग करने का प्रयास करें (उदाहरण के लिए ऐपसेटिंग में अधिमानतः कॉन्फ़िगर करने योग्य) या कार्यशील निर्देशिका को ठीक से सेट करें।

2
Thomas Luijken 25 जुलाई 2019, 14:24