2012-03-26 6 views
19

पर काम करता है हमारे पास एक प्रोजेक्ट है जो 32-बिट COM DLL और 64-बिट COM DLL (my earlier question से) तक संकलित करता है। जब मैं अपनी विंडोज 7 मशीन दोनों पर पंजीकरण करता हूं, तो दोनों सफलतापूर्वक पंजीकरण करते हैं। जब मैं Windows Server 2003 मशीन पर दोनों पंजीकृत करता हूं, तो दोनों सफलतापूर्वक पंजीकरण करते हैं।सर्वर 2008 पर 32-बिट DLL "संगत नहीं हो सकता है", लेकिन सर्वर 2003

लेकिन जब मैं एक Windows Server 2008 R2 मानक SP1 मशीन, 64-बिट DLL सफलतापूर्वक पंजीकृत करता है पर DLLs रजिस्टर करने के लिए प्रयास करते हैं, लेकिन 32-बिट DLL संदेश (sic) के साथ विफल:

मॉड्यूल ""% 1 "" आपके द्वारा चलाए जा रहे विंडोज़ संस्करण के साथ संगत नहीं हो सकता है। जांचें कि मॉड्यूल regsvr32.exe के x86 (32-बिट) या x64 (64-बिट) संस्करण के साथ संगत है या नहीं।

मुझे नहीं लगता कि 32-बिट डीएलएल WS2003 और Win7 के साथ संगत हो सकता है लेकिन WS2008 नहीं। इसका कोई अर्थ नही बन रहा है।

क्या हो रहा है?

+1

यह एक मूर्ख सवाल हो सकता है, लेकिन यदि आपके पास 32 बिट और 64 बिट संस्करण दोनों की असेंबली है, तो आप 64 बिट ओएस पर 32 बिट संस्करण को पंजीकृत करने का प्रयास क्यों कर रहे हैं? – NotMe

+5

यह एक गंभीर सवाल हो सकता है, लेकिन त्रुटि संदेश में कोई व्याकरणिक त्रुटि क्यों है? क्या वह कुछ एफयू स्थिति को संकेत दे रहा है? – arsaKasra

+2

पहले मूर्ख सवाल का जवाब देने के लिए: गुणवत्ता आश्वासन। चूंकि 32-बिट डीएलएल 64-बिट विंडोज़ द्वारा समर्थित हैं, इसलिए हमें यह सुनिश्चित करना होगा कि 32-बिट डीएलएल उस स्थिति में काम करे। –

उत्तर

13

Regsvr32.exe का संस्करण उस डेल के 32-/64-Bitness से मेल खाना चाहिए जिसे आप पंजीकरण करने का प्रयास कर रहे हैं। 64-बिट regsvr32 32-बिट डीएलएल लोड नहीं कर सकता है, और इसके विपरीत।

आपको% systemroot% \ SysWoW64 \ regsvr32.exe में स्थित regsrv32 के 32-बिट संस्करण को स्पष्ट रूप से कॉल करने की आवश्यकता हो सकती है।

http://support.microsoft.com/kb/249873

से Regsvr32.exe माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर के साथ शामिल है 3.0 या बाद के संस्करणों, विंडोज 95 OEM सेवा रिलीज़ 2 (OSR2) या बाद के संस्करणों, और Windows NT 4.0 सर्विस पैक 5 (SP5) या बाद के संस्करणों । Regsvr32.exe सिस्टम (विंडोज़ मी/विंडोज 98/विंडोज 95) या सिस्टम 32 (विंडोज एनटी/विंडोज एक्सपी/विंडोज विस्टा/विंडोज 7) फ़ोल्डर में स्थापित है।

नोट एक विंडोज ऑपरेटिंग सिस्टम के एक 64-बिट संस्करण पर, वहाँ Regsv32.exe फ़ाइल के दो संस्करणों रहे हैं:

  • 64-बिट संस्करण% systemroot% \ System32 \ regsvr32.exe है।
  • 32-बिट संस्करण% systemroot% \ SysWoW64 \ regsvr32.exe है। अपंजीकृत सर्वर - dllname

    /u: Regsvr32 [/ यू] [/ एन] [cmdline]/मैं [:]

Regsvr32.exe उपयोग Regsvr32.exe निम्नलिखित कमांड लाइन विकल्प है /i - कॉल करें इसे एक वैकल्पिक [cmdline] पास करने के लिए कॉल करें; जब/d कॉल के साथ उपयोग किया जाता है dll अनइंस्टॉल /n - DllRegisterServer को कॉल न करें; इस विकल्प का उपयोग/i /s - मौन के साथ किया जाना चाहिए; कोई संदेश बॉक्स प्रदर्शित नहीं करें (Windows XP और Windows Vista के साथ जोड़ा गया) जब आप Regsvr32.exe का उपयोग करते हैं, तो यह घटक लोड करने का प्रयास करता है और इसके DLLSelfRegister फ़ंक्शन को कॉल करता है। यदि यह प्रयास सफल होता है, तो Regsvr32.exe एक संवाद बॉक्स प्रदर्शित करता है जो सफलता को इंगित करता है। यदि प्रयास असफल है, Regsvr32.exe एक त्रुटि संदेश देता है। इसमें एक Win32 त्रुटि कोड शामिल हो सकता है।अधिक जानकारी के लिए, Microsoft ज्ञानकोष में आलेख देखने के लिए निम्न आलेख संख्या क्लिक करें: 1 9 3625 WinInet त्रुटि कोड (12001 से 12156)

+2

regsvr32 का 64-बिट संस्करण 32-बिट संस्करण को 32-बिट डीएलएल पंजीकृत करने के लिए 32-बिट संस्करण में प्रस्तुत कर सकता है, और इसके विपरीत। मामले की संभावना अधिक है कि WOW64 बिल्कुल स्थापित नहीं है। विंडोज सर्वर 2008 आर 2 से शुरू, WOW64 अब एक वैकल्पिक घटक है। –

+1

जानना अच्छा है, धन्यवाद! :) – nullforce

+3

हमने 32-बिट DLL को पंजीकृत करने के लिए SysWOW64 \ regsvr32 का उपयोग करने का प्रयास किया है और यह वही त्रुटि लाता है। –

2

मुझे इसे डीएल को \ c \ windows \ syswow64 \ निर्देशिका (यह system32 निर्देशिका में काम करेगा नहीं) और फिर स्पष्ट रूप से बुला syswow64 \ regsvr32, जैसे

c: \ windows \ syswow64 \ regsvr32 yourdll.dll

btw यह जब ग बुला काम नहीं होगा: \ windows \ syswow64 \ regsvr32 c: \ windows \ syswow64 \ yourdll.dll

6

यह बी की संभावना नहीं है ई आपके मामले में समस्या है, लेकिन अन्य लोगों के लिए उपयोगी हो सकता है जो एक ही त्रुटि संदेश पर खोज करके यह प्रश्न पाते हैं:

मुझे एक ही समस्या थी: एक डीएलएल जो 32-बिट या 64 के साथ पंजीकृत नहीं होगा RegSvr32 का संस्करण संस्करण। मैं DLL निर्भरता वाकर (Depends.exe, http://www.dependencywalker.com/) भरी हुई है और एक बहुत अधिक उपयोगी संदेश मिला:

त्रुटि: कम से कम एक फ़ाइल एक 32-बिट या 64-बिट Windows मॉड्यूल नहीं था।

मॉड्यूल सूची में सीपीयू कॉलम स्कैनिंग अपमानजनक मॉड्यूल की पहचान की। (मेरे मामले में, यह कहा गया "कोई डॉस या पीई हस्ताक्षर नहीं मिला। यह फ़ाइल वैध 32-बिट या 64-बिट विंडोज मॉड्यूल नहीं है।")

नैतिक: निर्भरता वॉकर आपको एक और उपयोगी त्रुटि संदेश दे सकता है RegSvr32.exe से।

+0

इससे मेरे लिए समस्या का स्रोत दिखाया गया। मेरा पथ ऐसा था कि 32 बिट संस्करण के बजाय 64 बिट डीएल लोड किया जा रहा था। – Armbie

1

मैं एक ही समस्या है, लेकिन मैं आदेशों

सीडी \ windows \ SysWOW64 regsvr32 ग उसका समाधान: \ फ़ाइल नाम। डीएल

0

SysInternals से Process Monitor का उपयोग करें।

1। "प्रक्रिया नाम" = regsvr32.exe द्वारा फ़िल्टर करें। Filter

2। Regsvr32.exe के सही संस्करण से अपने डीएल को पंजीकृत करने का प्रयास करें (32 बिट्स संस्करण SysWow64 फ़ोल्डर में है)

3। प्रक्रिया मॉनीटर आपके कंप्यूटर पर होने वाली हर चीज का पता लगाएगा।

4। सबसे पहले रजिस्ट्री ईवेंट (अब के लिए) enter image description here

5 को समाप्त करके अपना विश्लेषण शुरू करें। आप देख सकते हैं कि चुड़ैल डीएल पाया गया है और नहीं मिला है।

यहाँ एक (बहुत) Threed32.ocx की regsvr32.exe का आंशिक स्क्रीनशॉट जहाँ हम आवश्यक dll enter image description here

6 में से कुछ देख सकते हैं। आपका काम अभी शुरू हो रहा है। अब से।

1

कमांड प्रॉम्प्ट चला रहा है क्योंकि व्यवस्थापक ने मेरी समस्या को ठीक किया है।

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