ASP 0177 त्रुटि: 8007007e Server.CreateObject COM DLL के लिए विफल रहता है



vbscript asp-classic (1)

हम एक नए सर्वर पर 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 c:\windows में PCMSRV32.DLL है

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

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

vbscript jscript vba

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

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

Server.CreateObject विफल

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

PRB से: Server.CreateObject रिटर्न HTTP 500.100 या ASP 0177 त्रुटि (0x8007007E)

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

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

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

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

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

यदि आपको पता नहीं है कि DLL कहाँ स्थित है?

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

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

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

HKEY_CLASSES_ROOT

और विस्तार से

HKEY_LOCAL_MACHINE\Classes

जब भी ASP प्रोसेसर का सामना ProgId तो वह Windows रजिस्ट्री से बात करने का प्रयास करता है और एक संबंधित कुंजी ढूंढता है जो पंजीकृत COM सुलभ DLL के स्थान को दर्शाता है।

HKEY_CLASSES_ROOT\PCMServer.PCMServer

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

HKEY_CLASSES_ROOT\CLSID

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

HKEY_CLASSES_ROOT\CLSID\{GUID from CLSID}\InprocServer32

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

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

  1. HKEY_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\CLSID में पंजीकृत DLL उपकुंजी खोजने के लिए GUID का उपयोग करें

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

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

रजिस्ट्री में PCMServer.PCMServer लिए कोई ProgId ?

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

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

COM DLL को विंडोज के साथ रजिस्टर कैसे करें

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

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

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

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

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

  1. 64 बिट कार्यक्रमों के लिए

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

    %SystemRoot%\SysWOW64\

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

  1. 64 बिट

    HKEY_CLASSES_ROOT
  2. 32 बिट

    HKEY_CLASSES_ROOT\Wow6432Node

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सर्वर ऑब्जेक्ट त्रुटि 'ASP 0177: 8007007e'

Server.CreateObject विफल

COM DLL चेकलिस्ट

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

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

  3. क्या आर्किटेक्चर विशिष्ट स्थान में DLL के लिए Windows रजिस्ट्री में एक ProgId है

    HKEY_CLASSES_ROOT

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

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

  5. COM DLL (ApplicationIdentity, LocalSystem, NetworkService आदि) का उपयोग करने के लिए उपयोग किए जा रहे खाते के संदर्भ में, क्या मुझे भौतिक DLL फ़ाइल और रजिस्ट्री प्रविष्टियों दोनों को एक्सेस करने की अनुमति है?

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