मुझे अपने विंडोज सेवा कार्यक्रम के साथ अजीब त्रुटि दिखाई दे रही है। मेरा सेवा कार्यक्रम StartServiceCtrlDispatcher()
को main()
की शुरुआत में कॉल करता है, लेकिन यह कभी-कभी 1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
के साथ विफल रहता है।1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) के साथ विफल होने के लिए StartServiceCtrlDispatcher() का क्या कारण बनता है?
मुझे पता है कि यह त्रुटि तब होती है जब उपयोगकर्ता मैन्युअल रूप से प्रोग्राम (कंसोल प्रोग्राम के रूप में) प्रारंभ करता है। लेकिन, यह मामला नहीं है। मैंने यह त्रुटि उत्पन्न होने पर सेवा प्रोग्राम की मूल प्रक्रिया की जांच करने के लिए एक कोड जोड़ा, और यह services.exe को मूल प्रक्रिया है (मुझे लगता है कि यह मानना सुरक्षित है कि मेरा प्रोग्राम एससीएम द्वारा ठीक से शुरू किया गया था)।
दुर्भाग्य से, इस त्रुटि मेरे देव मशीन पर पुन: पेश नहीं है और अपने आप से यह डिबग नहीं कर सकते, लेकिन त्रुटि लॉग उपयोगकर्ता सिस्टम पर कब्जा कर लिया बताता है:
- यह समस्या सभी का केवल कुछ% पर हो रहा है इस कार्यक्रम के उपयोगकर्ता।
- यदि समस्या होती है, तो यह दोहराना प्रतीत नहीं होता है। अगली बार सेवा आमतौर पर सफलतापूर्वक शुरू होती है।
- जब यह समस्या होती है,
StartServiceCtrlDispatcher()
असफल होने से पहले लगभग एक सेकंड के लिए स्टाल करता है।
क्या किसी ने भी इसी तरह की त्रुटि देखी है? यदि हां, तो त्रुटि का कारण क्या था?
क्या आपने डबल-चेक किया है कि आप मुख्य थ्रेड से StartServiceCtrlDispatcher को कॉल कर रहे हैं, इसे शुरू करने की प्रक्रिया के कुछ सेकंड के भीतर कहा जा रहा है, और SERVICE_ENTRY_TABLE सरणी सही है? (विशेष रूप से, सुनिश्चित करें कि अंतिम प्रविष्टि {NULL, NULL} है।) –
हां, SERVICE_ENTRY_TABLE ठीक से समाप्त हो गया है। और, समय के बारे में, मैं अपने मूल प्रश्न में उल्लेख करना भूल गया, लेकिन StartServiceCtrlDispatcher() विफलता के बाद, मेरा कोड चेक किया गया टाइम स्टैम्प और आमतौर पर सेवा प्रक्रिया शुरू होने के बाद यह लगभग एक सेकंड (या कम) है। तो, मुझे लगता है कि यह असंभव है कि देरी त्रुटि का कारण बन रही है। –
बहुत विषम। और यदि आप एक सामान्य कारक की पहचान नहीं कर सकते हैं तो डीबग करना बहुत मुश्किल है ताकि आप समस्या को पुन: उत्पन्न कर सकें। एक संभावित कामकाज के रूप में, यदि आप पहली कॉल विफल होने पर शायद दूसरी बार StartServiceCtrlDispatcher() को कॉल करने का प्रयास कर सकते हैं? –