2009-05-19 13 views
16

निर्दिष्ट फ़ाइल नहीं ढूंढ सकता है मेरे पास एक .NET 2.0 COM ऑब्जेक्ट है जिसका उपयोग Excel में VBA द्वारा किया जाता है। यह मेरी देव मशीन पर ठीक काम करता है, लेकिन जब इसे एक स्वच्छ वीएम वर्कस्टेशन पर उपयोग करने का प्रयास किया जाता है तो मुझे यह त्रुटि मिलती है:एक्सेल .NET COM - स्वचालन त्रुटि। सिस्टम

स्वचालन त्रुटि। सिस्टम निर्दिष्ट फ़ाइल नहीं मिल सकता है।

डीएलएल "regasm/tlb/codebase mycom.dll" के साथ पंजीकृत है और जीएसी में नहीं डाला गया है। मेरे पास वीएम बॉक्स

पर कोई अधिकार नहीं है?

उत्तर

13

आपको या तो codebase पैरामीटर मान के रूप में असेंबली के पूर्ण पथ के साथ regasm का आह्वान करना होगा या असेंबली को कुछ स्थानों में रखना होगा जो पुस्तकालयों को खोजने के लिए हमेशा पथ पर है। अन्यथा यह तब नहीं मिलेगा जब क्लाइंट COM ऑब्जेक्ट को चालू करने का प्रयास करता है।

+0

मैंने सी: \ temp में स्थित असेंबली के पूर्ण पथ पर regasm का उपयोग करने का प्रयास किया, लेकिन फिर भी वही त्रुटि – ingt

+1

तो मुझे लगता है कि ProcessMonitor - http://technet.microsoft.com शुरू करने के लिए आपकी सबसे अच्छी शर्त है /ru-ru/sysinternals/bb896645.aspx - और देखो कि वास्तव में कौन सी फ़ाइल नहीं मिली है। यह कुछ आश्रित असेंबली हो सकती है जिसे आप बिल्कुल नहीं जानते हैं। एक बार जब आप निश्चित रूप से जानते हैं तो इसे हल करना बहुत आसान होगा। – sharptooth

+1

sharptooth, इस उत्तर के लिए * बहुत * बहुत धन्यवाद। यह आज मेरे छिपे बचाया! –

7

विंडोज 7, 64 बिट और एक .NET 4.0 फ्रेमवर्क डीएल (32 बिट) पर जो कि मैं एक Microsoft Excel 2010 VBA अनुप्रयोग के लिए COM ऑब्जेक्ट के रूप में उपयोग करने योग्य बनना चाहता हूं, यहां मेरे लिए क्या काम किया गया है।

  1. कॉपी ग dll: (।।/Tlb :.) \ windows \ SysWOW64
  2. एक cmd खोल में,

    C:\Windows\Microsoft.NET\Framework\v4.0.<whatever you have>\regasm.exe c:\windows\syswow64\<name of dll> /codebase /tlb:c:\windows\syswow64\<name of dll minus '.dll'>.tlb 
    

आप पिछले भाग को छोड़ सकते हैं चलाने यदि आप मशीन पर इंटेलिजेंस नहीं चाहते हैं या चाहते हैं तो आप असेंबली को पंजीकृत कर रहे हैं।

मेरे पास कुंजी लटकाना यह है कि XP ​​पर मुझे पहले कभी/codebase पैरामीटर का उपयोग नहीं करना पड़ा था, लेकिन यह काम करने से पहले महत्वपूर्ण चीज की आवश्यकता थी।

3

मुझे यह "ऑटोमेशन त्रुटि मिली है। सिस्टम को निर्दिष्ट फ़ाइल नहीं मिल सकती है" त्रुटि के बाद मैंने एक .NET .dll (v4.0) बनाया था, जिसमें इसे VB6 अनुप्रयोग में उपयोग करने के इरादे से (मेरी कक्षा को सजाया गया " क्लासइंटरफेस "और" कॉमविज़िबल "विशेषताएं," कॉमविज़िबल "के साथ विधियां)।

मैंने "regasm.exe -tlb सी: \ PathTo \ MyDll.dll" चलाया लेकिन मुझे अपने वीबी 6 एप्लिकेशन में संदर्भ के रूप में .tlb फ़ाइल जोड़ने और इसे चलाने/डिबग करने के बाद उपर्युक्त त्रुटि प्राप्त हुई। Regasm.exe कॉल में "-codebase" पैरामीटर जोड़ने के बाद और .tlb संदर्भ को फिर से जोड़ने से त्रुटि हल हो गई।

बस सोचा कि मैं अपना अनुभव साझा करूंगा।

0

मुझे एक स्वचालन त्रुटि भी प्राप्त होती है। मेरा संदर्भ (एमएस एक्सेस में) एक टीएलबी फ़ाइल के लिए था। संबंधित DLL फ़ाइल उस फ़ोल्डर से अनुपलब्ध थी जिसमें TLB फ़ाइल थी और इससे 'स्वचालन त्रुटि' संदेश प्रकट हुआ। निश्चित रूप से डीएलएल वापस जोड़ना।

0

मुझे एक ही त्रुटि मिल रही थी (एक दूसरी मशीन पर विरासत वीबी 6 कॉड से .NET ऑब्जेक्ट का उपभोग नहीं कर सका, यह पहली मशीन पर काम कर रहा था, जहां मैंने इसे मूल रूप से लिखा था)। .NET DLL संकलित और पंजीकृत बस ठीक है - मैंने सभी प्रकार के संयोजनों की कोशिश की - वीएस में "COM इंटरऑप के लिए रजिस्टर" निर्माण सेटिंग का उपयोग किए बिना और बिना; मैन्युअल रूप से regasm.exe के माध्यम से पंजीकरण कर रहा है और इसे/codebase पैरामीटर के साथ और बिना दोनों को आजमा रहा है; COM दृश्यमान असेंबली-स्तर विशेषता को सक्षम और दबाने दोनों की कोशिश की (जब दबाने पर, मैंने कक्षा से विशेषता को सेट किया जो मुझे COM से उपभोग करने की आवश्यकता है)। लेकिन कुछ भी काम नहीं किया, मुझे एक ही त्रुटि मिल रही थी।

बाहर निकलता है मैंने डीएलएल आउटपुट को .NET 4 में अपग्रेड किया था।5 दूसरी मशीन पर, जबकि यह मूल रूप से .NET 2.0 असेंबली का निर्माण कर रहा था। मेरे प्रोजेक्ट में तीसरे पक्ष इंटरऑप डीएलएल को लक्षित करने वाले कुछ संदर्भ थे जो .NET 2.0 चला रहे थे। जब मैंने या तो इन संदर्भों को अद्यतन किया और डीएलएल को फिर से बनाया- मेरी परियोजना को .NET 2.0 पर चलाने के लिए सेट किया गया - मेरी समस्या हल हो गई। जब/कोडबेस (जो वीएस स्वचालित रूप से करता है) का उपयोग करते समय मुझे पता चला कि मुझे अपनी डीएलएल को एप्लिकेशन निर्देशिका में या \ syswow64 में डालने की आवश्यकता नहीं है। एमएसडीएन दस्तावेज़ों का कहना है कि/codebase का उपयोग करते समय आपको अपनी असेंबली के लिए एसएन (मजबूत नाम) का उपयोग करना होगा, लेकिन मुझे लगता है कि आपको यह नहीं करना है; आप बस regasm.exe कमांड लाइन उपकरण से एक चेतावनी प्राप्त करते हैं।

बिंदु एक COM इंटरऑप दृष्टिकोण से है, आपके द्वारा लक्षित किए जा रहे .NET Framework के संबंध में अपनी निर्भरताओं के .NET रनटाइम संस्करण के बारे में सावधान रहें।

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