त्रुटि एएसपी 0177: 8007007e सर्वर। सीईटीओबैज COM DLL के लिए विफल रहता है



vbscript asp-classic (1)

नीचे दी गई सलाह Server.CreateObject से संबंधित है। CreateObject और CreateObject इन उपयोग में

vbscript jscript vba

वेब सर्वर वर्ग एस्प क्लासिक के लिए विशिष्ट हैं लेकिन फिर भी लायक पढ़ना

क्या कारण यह त्रुटि?

Server.CreateObject विफल

इसका सबसे अधिक कारण होता है जब वेब अनुप्रयोग एक वेब सर्वर से दूसरे में स्थानांतरित हो जाते हैं बिना बाहरी COM घटकों की समझ के बिना जो प्रयोग में हैं और वेब सर्वर के साथ पंजीकृत हैं

PRB से: Server.CreateObject HTTP 500.100 या एएसपी 0177 त्रुटि देता है (0x8007007E)

यह त्रुटि तब आती है जब आप उस सर्वर का उपयोग करने का प्रयास करते हैं जो किसी स्थानीय सिस्टम पर पंजीकृत नहीं है जो ऑब्जेक्ट को इन्स्तांत करने के लिए Server.CreateObject विधि है।

त्रुटि के स्रोत की पहचान करना

यदि आप एएसपी वेब अनुप्रयोग के अंदर COM घटकों का उपयोग कर रहे हैं तो आप इस तरह एक पंक्ति देखेंगे

set g_pcmsrv=Server.CreateObject("PCMServer.PCMServer") 

आमतौर पर त्रुटि Set लाइन को इंगित करेगी, जिससे कारण की पहचान आसान हो सकती है (सौभाग्य से आपके पास कुछ अच्छा ट्रेस कोड है इसलिए यह बेहतर है)

अगर आपको नहीं पता कि डीएलएल कहाँ स्थित है?

नोट: कृपया Windows रजिस्ट्री तक पहुँचते समय सावधानी बरतें क्योंकि यह अनजाने में परिवर्तन करने के लिए बहुत आसान है, जो ऑपरेटिंग सिस्टम के गंभीर परिणाम हैं और चरम मामलों में सिस्टम को पुनर्स्थापित या पुन: स्थापित / मरम्मत की आवश्यकता होगी।

CreateObject विधि के अंदर की स्ट्रिंग को CreateObject रूप में जाना जाता है और इसका उपयोग विंडोज रजिस्ट्री के भीतर एक कुंजी के लिए एक पहचानकर्ता के रूप में किया जाता है जो कि

नोट: विंडोज रजिस्ट्री को विंडोज़ के अधिकांश संस्करणों में रीजेट किया जा सकता है जो रजिस्ट्री संपादक के नाम से भी जाना जाता है। Windows रजिस्ट्री ब्राउज़ करने के लिए इस टूल का उपयोग करते समय बहुत सावधान रहें।

HKEY_CLASSES_ROOT

और विस्तार से

HKEY_LOCAL_MACHINE\Classes

जब भी एएसपी प्रोसेसर का मुकाबला ProgId यह विंडोज रजिस्ट्री से बात करता है और संबंधित कॉम सुलभ डीएलएल के स्थान को इंगित करता है एक संबंधित कुंजी को खोजने का प्रयास करता है।

HKEY_CLASSES_ROOT\PCMServer.PCMServer

इसके लिए एक आम दृष्टिकोण कुंजी में सीएलएसआईडी नामक एक उपकुंजी है जो संबंधित पंजीकृत डीएलएल के लिए कक्षा GUID को इंगित करता है। एक बार GUID कुंजी में स्थित है

HKEY_CLASSES_ROOT

हाइव का प्रयोग उपकुंजी को देखकर स्थान को खोजने के लिए किया जा सकता है

HKEY_CLASSES_ROOT\{GUID from CLSID}\InprocServer32

जहां स्थान (default) मान में संग्रहीत किया जाएगा

उदाहरण का प्रयोग ProgId - Scripting.FileSystemObject

  1. HKEY_CLASSES_ROOT में Scripting.FileSystemObjectHKEY_CLASSES_ROOT Scripting.FileSystemObject उपकुंजी

    HKEY_CLASSES_ROOT\Scripting.FilesystemObject
  2. उपकुंजी CLSID से GUID की पहचान करें

    HKEY_CLASSES_ROOT\Scripting.FilesystemObject\CLSID
    
    (default) - "{0D43FE01-F093-11CF-8940-00A0C9054228}"  
  3. HKEY_CLASSES_ROOT में पंजीकृत डीएलएल उपकुंजी को खोजने के लिए GUID का उपयोग करें

    HKEY_CLASSES_ROOT\{0D43FE01-F093-11CF-8940-00A0C9054228}
  4. DLL स्थान के लिए उपकुंजी InprocServer32 (default) मान की जांच करें

    HKEY_CLASSES_ROOT\{0D43FE01-F093-11CF-8940-00A0C9054228}\InprocServer32
    
    (default) - "C:\Windows\System32\scrrun.dll"

रजिस्ट्री में PCMServer.PCMServerPCMServer.PCMServer लिए कोई PCMServer.PCMServer नहीं है?

अगर आपको रजिस्ट्री में संबंधित ProgId नहीं मिल सकता है तो यह दो कारणों में से एक होने की संभावना है क्योंकि हम यहां विस्तृत करेंगे।

  1. डीएलएल पंजीकृत नहीं है
  2. DLL गलत क्षेत्र में पंजीकृत है।

कैसे विंडोज के साथ COM DLL पंजीकृत करें

COM DLL पंजीकृत हो सकते हैं और रजिस्ट्री प्रविष्टियों को Windows Command Prompt से एल्िवेटेड अनुमतियों का उपयोग कर regsvr32.exe उपकरण चला कर बनाया जा सकता है (यह संस्करण से लेकर विंडोज के संस्करण में भिन्न होता है)

हालांकि हम जारी रखने से पहले दोनों ऑपरेटिंग सिस्टम और एएसपी वेब अनुप्रयोग द्वारा उपयोग किए गए मोड की वास्तुकला बहुत महत्वपूर्ण हैं।

अधिकांश नए हार्डवेयर 64 बिट हैं जो विंडोज में एक पहेली बनाता है क्योंकि अब इसे नए 64 बिट वास्तुकला का समर्थन करना है और अभी भी 32 बिट वास्तुकला के लिए समर्थन बनाए रखना है। माइक्रोसॉफ्ट के समाधान के साथ आया था ओएस को दो में विभाजित करना, इसलिए हमारे पास 64 बिट तत्व और 32 बिट तत्व हैं। मुख्य ओएस कार्यक्रमों को दो फ़ोल्डरों में विभाजित किया गया है (केवल 64 बिट ओएस पर) क्योंकि 32 बिट ओएस 64 बिट के साथ संघर्ष करने की ज़रूरत नहीं है, भले ही हार्डवेयर इसके लिए सक्षम हो)

नोट: केवल 32 बिट सिस्टम पर सिस्टम फाइल और विंडोज रजिस्ट्री दोनों के लिए 64 बिट स्थान का उपयोग किया जाता है।

64 बिट ओएस पर सिस्टम प्रोग्राम में स्थित हैं

  1. 64 बिट प्रोग्राम के लिए

    %SystemRoot%\System32\
  2. 32 बिट प्रोग्राम के लिए

    %SystemRoot%\SysWOW64\

यह विंडोज रजिस्ट्री पर भी लागू होता है

  1. 64 बिट

    HKEY_CLASSES_ROOT
  2. 32 बिट

    HKEY_CLASSES_ROOT\Wow6432Node

उदाहरण के लिए, विंडोज के 64 बिट संस्करण पर निम्न निर्देश 32 बिट रजिस्ट्री में PCMSRV32.DLL को पंजीकृत करेगा और संबंधित कॉम डीएलएल रजिस्ट्री कुंजियों को बनाएगा।

C:\Windows\SysWOW64>regsvr32 "C:\Windows\PCMSRV32.DLL"

IIS अनुप्रयोग पूल

जैसा कि आईआईएस समेत 64 बिट का समर्थन करना शुरू होता है, आपको अभी भी लिगेसी अनुप्रयोगों का समर्थन करने की आवश्यकता होती है जो केवल 32 बिट कॉम का समर्थन करते हैं, इसलिए IIS 6.0 में IIS 6.0 (Windows Server 2003, सर्विस पैक 1 के साथ शुरू) अनुप्रयोग पूल सेटिंग्स के तहत कॉन्फ़िगर करने योग्य संपत्ति Enabled32BitAppOnWin64 32 Enabled32BitAppOnWin64 जो अनुप्रयोग पूल को 32 बिट मोड में विंडोज के 64 बिट संस्करणों पर चलाने की अनुमति देता है।

इससे पहले कि आप COM DLL को यह पंजीकरण करने से पहले पंजीकरण करें कि आपको यह पंजीकरण क्यों करना चाहिए, आपको यह पता होना चाहिए कि क्या अनुप्रयोग पूल 32 बिट मोड में चल रहा है या नहीं। आईआईएस 7.0 और इसके बाद के संस्करण में आप केवल आईआईएस मैनेजर एप्लीकेशन के अंदर एपलीकेशन पूल प्रॉपर्टी से इसकी जांच कर सकते हैं। यह सेटिंग General अनुभाग के अंतर्गत Advanced Settings और उसे Enable 32-Bit Applications को Enable 32-Bit Applications कहते हैं (यह भी applicationHost.config में कॉन्फ़िगर किया जा सकता है, जो कि <ApplicationPools> सेक्शन के अंतर्गत enable32BitAppOnWin64 का उपयोग कर)

  • यदि Enable 32-Bit Applications False सेट है

    IIS अनुप्रयोग पूल मूल 64 बिट मोड में चल रहा है और एएसपी वेब अनुप्रयोग द्वारा उपयोग किए जाने वाले किसी भी सीएफ़ डीएलएल को 64 बिट का समर्थन करने की आवश्यकता होगी और इसे 64 बिट में जोड़ने के लिए 64 बिट संस्करण का उपयोग करके regsvr32.exe करना होगा। रजिस्ट्री।

    C:\Windows\System32>regsvr32 "C:\Windows\PCMSRV32.DLL"
  • यदि Enable 32-Bit Applications True सेट है

    IIS अनुप्रयोग पूल 32 बिट मोड में चल रहा है और एएसपी वेब अनुप्रयोग द्वारा उपयोग किए जाने वाले किसी भी सीएफ़ डीएलएल को 32 बिट कॉम डीएलएल की आवश्यकता होगी और इसे 32 बिट संस्करण का उपयोग करके 32 बिट regsvr32.exe में जोड़ा जाएगा। बिट रजिस्ट्री

    C:\Windows\SysWOW64>regsvr32 "C:\Windows\PCMSRV32.DLL"

regsvr32.exe के गलत संस्करण का उपयोग कर COM DLL पंजीकृत करना

उदाहरण के लिए उपयोग करके

C:\Windows\SysWOW64>regsvr32 "C:\Windows\PCMSRV32.DLL"

IIS अनुप्रयोग पूल 32 बिट मोड में नहीं है जब Windows के 64 बिट संस्करण पर 32 बिट रजिस्ट्री के साथ COM DLL को पंजीकृत करने के लिए एएसपी 500.100 आंतरिक सर्वर त्रुटि का कारण होगा

सर्वर वस्तु त्रुटि 'एएसपी 0177: 8007007'

Server.CreateObject विफल

COM DLL चेकलिस्ट

  1. IIS अनुप्रयोग पूल उन्नत सेटिंग Enable 32-Bit Applications करने के लिए सेट है, क्योंकि यह कैसे आप COM DLL रजिस्टर पर प्रभाव पड़ता है?

  2. क्या DLS रजिस्ट्री का विशिष्ट संस्करण का उपयोग कर पंजीकृत है? (यदि Windows संस्करण 64 बिट डिफ़ॉल्ट का उपयोग नहीं करता है) जो Enable 32-Bit Applications को Enable 32-Bit Applications करने की सेटिंग को दर्शाता है?

  3. क्या विंडोज रजिस्ट्री में डीएलएल के लिए ProgId का वास्तुकला विशिष्ट स्थान है

    HKEY_CLASSES_ROOT

    यह Enable 32-Bit Applications को Enable 32-Bit Applications करने की सेटिंग को दर्शाता है?

  4. क्या InprocServer32 कुंजी में DLL के लिए सही स्थान है?

उपयोगी कड़ियाँ

हम एक नया सर्वर पर एक COM DLL स्थापित करने का प्रयास कर रहे हैं इंटरफ़ेस क्लासिक एएसपी है। मैप कनेक्टर डीएलएल समस्या प्रतीत हो रही है, लेकिन जहां तक ​​मैं प्राप्त कर पा रहा हूं।

हम 500 त्रुटियों के अलावा कुछ भी देने के लिए IIS द्वारा प्रदत्त पृष्ठों को प्राप्त करने में असमर्थ हैं।

जब एएसपी का पता लगाया जाए:

127.  -ASP_SCRIPT_TRACE_COM_CALL_END 


FilePath
C:\INETPUB\WWWROOT\MILER\GLOBAL.ASA 

LineNumber
6 

CurrentStatement
set g_pcmsrv=Server.CreateObject("PCMServer.PCMServer") 

SizeOfStatement
55 


0 ms


128.  -ASP_LOG_ERROR 


LineNumber
6 

ErrorCode
ASP 0177 : 8007007e 

Description
Server.CreateObject Failed

DLL PCMSRV32.DLL c:\windows

global.asa:

Sub Application_OnStart


set g_pcmsrv=Server.CreateObject("PCMServer.PCMServer")
set application("g_pcmsrv") = g_pcmsrv

set g_pcmmapmgr=Server.CreateObject("Pcmgole.PCMMapMgr")
set application("g_pcmmapmgr") = g_pcmmapmgr


End Sub

Sub Session_OnStart
set Session("currentTrip") = application("g_pcmsrv").NewTrip("NA")
set Session("map") = application("g_pcmmapmgr").createMap()
End Sub

Sub Session_OnEnd
set Session("currentTrip") = Nothing
set Session("map") = Nothing
End Sub

Sub Application_Onend
Set application("g_pcmsrv")=Nothing
Set application("g_pcmmapmgr")=Nothing
End Sub