2010-09-15 9 views
12

से काम करने से रोकता है मेरे एक सहयोगी ने COM इंटरऑप के माध्यम से जेस्क्रिप्ट के उपयोग के लिए वीबीनेट में एक असेंबली बनाई। असेंबली ठीक काम करने के लिए प्रयुक्त होती थी, लेकिन हमने इसे हस्ताक्षर किया और अब यह केवल विंडोज 7 मशीनों पर काम करता है। मैंने 2 विंडोज 7 मशीनों और 2 विंडोज विस्टा मशीनों का परीक्षण किया है।एक मजबूत नाम के साथ मेरी असेंबली पर हस्ताक्षर करना इसे

जब हम विधानसभा पर हस्ताक्षर किए और हम JScript में ActiveX वस्तु का दृष्टांत करने की कोशिश, एक त्रुटि कोई संदेश और केवल एक संख्या के साथ दिया जाता है:

Error:
Error number: -2146234304

त्रुटि संख्या के लिए गूगल पर एक खोज नहीं था ज्यादा लौटें

यदि हम असेंबली से मजबूत नाम हटाते हैं, तो यह ठीक काम करता है। समस्या क्या हो सकती है पर कोई विचार? सुनिश्चित नहीं है कि इससे कोई फर्क पड़ता है, लेकिन असेंबली को संकलित किया जा रहा है और वीएस 2010 के साथ हस्ताक्षरित किया गया है।

+3

आपके मामले में, मुझे लगता है कि -2146234304 'S_FALSE' या' ERROR_INVALID_FUNCTION' है। err.exe इन त्रुटि कोड को देखने के लिए उपयोगी है, http://blogs.msdn.com/b/astebner/archive/2008/06/17/8611734.aspx –

उत्तर

6

क्या आपने असेंबली पर हस्ताक्षर करने के बाद COM इंटरऑप को फिर से बनाया है? आप असेंबली के नए संस्करण को कैसे पंजीकृत करते हैं? क्या आपने इंटरनेट एक्सप्लोरर के कैश को मंजूरी दे दी है?

सामान्य रूप से त्रुटि -2146234304 (0x80131040) का अर्थ FUSION_E_REF_DEF_MISMATCH है: "नाम [yourAssembly] नाम के साथ स्थित असेंबली की स्पष्ट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है"। तो आपको असेंबली के मैनिफेस्ट को अपडेट करना होगा जो आपके हस्ताक्षरित असेंबली का उपयोग करेगा। आपकी स्थिति में इसका क्या मतलब है आपको पता होना चाहिए। असेंबली को प्रतिबिंब AssemblyHKEY_CLASSES_ROOT\CLSID\{YOUR_GUID}\InprocServer32 के मूल्य के तहत भी बचाया गया है और न केवल वास्तविक अभिव्यक्ति में।

आप Fuslogvw.exe (Assembly Binding Log Viewer) (या http://msdn.microsoft.com/en-US/library/ms229864(v=VS.80).aspx) के संबंध में समस्या की जांच करने का प्रयास कर सकते हैं। HKLM\Software\Microsoft\Fusion के तहत रजिस्ट्री में कुछ परिवर्तन (EnableLog, LogFailures,

आप रास्ते में समस्या का समाधान नहीं होगा, तो आप एक परियोजना है जो आपकी समस्या को पुन: पेश करने के लिए इस्तेमाल किया जा सकता है के लिए एक लिंक पोस्ट कर सकता है।

+0

* regasm.exe * यह था कि मैं इसे कैसे पंजीकृत कर रहा था। अंतिम संस्करण में, स्क्रिप्ट को रजिस्ट्री कुंजी लिखकर नियंत्रण पंजीकृत करने की आवश्यकता है, इसलिए यह * regasm.exe * से आउटपुट की नकल करता है। मैं इसे Win 7 पर बिना किसी समस्या के कर सकता हूं लेकिन मैं Vista पर हस्ताक्षरित असेंबली को तुरंत चालू नहीं कर सकता। आपकी सलाह के लिए धन्यवाद, मैं इसे देख लूंगा और आपको बता दूंगा कि यह कैसा चल रहा है। –

+1

@ एंडी ई: एक और टिप्पणी। यदि आपने अभी तक अपनी असेंबली "स्क्रिप्टिंग के लिए सुरक्षित" नहीं बनाई है, तो मैं आपको ऐसा करने की सलाह देता हूं। यह बहुत आसान है। आपको 'IObjectSafety' इंटरफ़ेस को कार्यान्वित करना होगा (http://blog.devstone.com/aaron/archive/2007/06/12/2409.aspx और http://www.atalasoft.com/cs/blogs/rickm/ देखें संग्रह/200 9/06/03/net-2-0-activex-control-gotchas-safe-for-scripting-and-hooking-in-events.aspx उदाहरण के लिए) – Oleg

+0

@ एंडी ई: क्या आपके पास कोई प्रगति है जांच? क्या आपने Vista कंप्यूटर पर सभी आईई सेटिंग्स के ज़ोन सुरक्षा सेटिंग्स और आईई कैश समावेशी "सी: \ विंडोज़ \ डाउनलोड की गई प्रोग्राम फ़ाइलें" को रीसेट करने का प्रयास किया है, जिसमें समस्या है? क्या आप इस बारे में अधिक बता सकते हैं कि आप असेंबली पर कैसे हस्ताक्षर करते हैं? VisualInfo.cs सहित विजुअल स्टूडियो प्रोजेक्ट में कुंजी सहित, या आप SignTool.exe के sn.exe के संबंध में देरी हस्ताक्षर का उपयोग करते हैं? क्या आप कोड हस्ताक्षर प्रमाणपत्र की पीवीके फ़ाइल का उपयोग करते हैं? यदि आप प्रमाण पत्र का उपयोग करते हैं, तो क्या यह प्रसिद्ध प्राधिकारी या स्वयं हस्ताक्षरित है? आप गंतव्य कंप्यूटर पर असेंबली कैसे तैनात करते हैं? – Oleg

0

एंडी, सुनिश्चित नहीं है कि this is relevant है। समाधान वहाँ का कहना है:

मैं adxloader.dll (\ में नया एक से ऐड-इन एक्सप्रेस नेट \ Redistributables) रास्ते में अद्यतन करने के लिए भूल गया - मैं इसे अपडेट किए जाने के अनुमान ...

+0

हाय पीटर देखें। लिंक के लिए धन्यवाद, लेकिन मैं ऐड-इन एक्सप्रेस का उपयोग नहीं कर रहा हूं। मुझे लगता है कि समस्या से संबंधित हो सकता है क्योंकि मुझे लगता है कि एड-इन एक्सप्रेस हमारी स्वयं की असेंबली के समान तरीके से काम करता है (सिस्टम पर निर्भर करता है। रिफ्लेक्शन)। –

+0

@ एंडी: कोई चिंता नहीं! मैंने सोचा कि यह समान लगता है। क्षमा करें यह और मदद नहीं थी। –

0

आपका नंबर पूर्णांक सीमा की शुरुआत की तरह दिखता है!

Signed: −2,147,483,648 to +2,147,483,647, -(2^31)~(2^31-1) 

हो सकता है आप एक कास्टिंग त्रुटि, या एक बहुत बड़ी संख्या आप को बढ़ाने के लिए कोशिश कर रहे हैं है और अगर यह अधिकतम (+२१४७४८३६४७) तक पहुँच जाता है यह -2.147.483.648

बस एक अनुमान से पीछे की ओर गिनती शुरू होता है!

1
से पहले की जरूरत हो सकता है

समस्याग्रस्त मशीन पर अपना हस्ताक्षरित डीएल खोलने के लिए dependency walker का उपयोग करें। यह आपको बताएगा कि डीएलएल क्यों लोड नहीं किया जा सकता है। यह एक डीएल पर निर्भर हो सकता है जो विंडोज संस्करणों के बीच अलग है, जो हस्ताक्षर करने के बाद एक समस्या है।

+0

धन्यवाद, मैं इसे देख लूंगा। –

0

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

यदि आप एंटरप्राइज़ लाइब्रेरी का उपयोग कर रहे हैं तो यहां कुछ और background है।

5

त्रुटि कोड ix 0x80131040। यह एक कोड है जो .NET अपवाद से मेल खाता है, एक बहुत आम है।

The located assembly's manifest definition does not match the assembly reference.

मुझे आश्चर्य है कि आपको इसके लिए कोई संदेश नहीं मिला है, तो आप अपने त्रुटि हैंडलिंग कोड की समीक्षा करना चाहेंगे। Anyhoo, आपके पास कुछ डीएलएल नरक चल रहा है, सीएलआर एक असेंबली ढूंढ रहा है जिसका [असेंबली वर्जन] या पब्लिककीटोकन संदर्भ निर्माण असेंबली से मेल नहीं खाता है जिसका उपयोग कोड बनाने के लिए किया गया था। यह देखते हुए कि यह एक मजबूत नामित असेंबली से जुड़ा हुआ है, आपने कोड बनाने के के बाद असेंबली पर हस्ताक्षर किए होंगे। इस मामले में बस अपनी परियोजना से असेंबली संदर्भ को हटाकर इसे वापस जोड़ना, अब मजबूत नामित असेंबली का चयन करना, समस्या को ठीक करेगा।

लेकिन इस पर अनुमान लगाने की कोई आवश्यकता नहीं है, Fuslogvw.exe उपयोगिता आपको बताएगी कि क्या गलत हो रहा है। बाध्यकारी प्रयास का पता लगाने और यह असफल होने के कारण इसे पहले चलाएं।

+0

धन्यवाद, हंस। एक नया सार्वजनिक टोकन उत्पन्न करना ऐसा लगता है कि इससे समस्या हल हो सकती है, मुझे बस अधिक परीक्षण करने की आवश्यकता है। –

-1

नेट फ्रेमवर्क कॉन्फ़िगरेशन कंसोल पर जाएं और अपनी मशीन पर रनटाइम सुरक्षा नीति सेटिंग्स के साथ खेलो।

0

एक कार्यशील XP कॉन्फ़िगरेशन (या Vista बॉक्स से) से अपनी असेंबली पर हस्ताक्षर करने का प्रयास करें। कैपिकॉम विंडोज 7 में समर्थित नहीं है, इसलिए आपकी असेंबली पर हस्ताक्षर करने के लिए जो भी संकेत उपकरण हो सकता है वह Vista के साथ पिछड़ा संगत नहीं हो सकता है। अब मैंने कैपिकॉम काम को ठीक से देखा है, लेकिन मैंने इसे किसी कारण से असफल भी देखा है, और "असमर्थित" का अर्थ है कि अगर आप कॉल करने का प्रयास करते हैं तो आपको माइक्रोसॉफ्ट समर्थन से मिलता है।

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

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