मेरे पास सी # (2.0 एक्सपी एम्बेडेड पर चल रहा है) में एक एप्लिकेशन है जो विंडोज सेवा के रूप में लागू 'वॉचडॉग' के साथ संचार कर रहा है। जब डिवाइस बूट होता है, तो इस सेवा को आमतौर पर शुरू करने में कुछ समय लगता है। अगर सेवा चल रही है, तो मैं अपने कोड से जांचना चाहता हूं। मैं यह कैसे हासिल कर सकता हूं?मैं कैसे सत्यापित कर सकता हूं कि कोई Windows सेवा चल रहा है
उत्तर
मुझे लगता है कि कुछ इस तरह काम करेगा:
अपनी परियोजना संदर्भ (इसमें .NET टैब पर है) करने के लिए System.ServiceProcess जोड़ें।
त्वरित तरीका:
return new ServiceController(SERVICE_NAME).Status == ServiceControllerStatus.Running;
सुरक्षित तरीका:
try
{
using(ServiceController sc = new ServiceController(SERVICE_NAME))
{
return sc.Status == ServiceControllerStatus.Running;
}
}
catch(ArgumentException) { return false; }
catch(Win32Exception) { return false; }
वर्बोज़ रास्ता:
using System.ServiceProcess;
//
ServiceController sc;
try
{
sc = new ServiceController(SERVICE_NAME);
}
catch(ArgumentException)
{
return "Invalid service name."; // Note that just because a name is valid does not mean the service exists.
}
using(sc)
{
ServiceControllerStatus status;
try
{
sc.Refresh(); // calling sc.Refresh() is unnecessary on the first use of `Status` but if you keep the ServiceController in-memory then be sure to call this if you're using it periodically.
status = sc.Status;
}
catch(Win32Exception ex)
{
// A Win32Exception will be raised if the service-name does not exist or the running process has insufficient permissions to query service status.
// See Win32 QueryServiceStatus()'s documentation.
return "Error: " + ex.Message;
}
switch(status)
{
case ServiceControllerStatus.Running:
return "Running";
case ServiceControllerStatus.Stopped:
return "Stopped";
case ServiceControllerStatus.Paused:
return "Paused";
case ServiceControllerStatus.StopPending:
return "Stopping";
case ServiceControllerStatus.StartPending:
return "Starting";
default:
return "Status Changing";
}
}
संपादित करें: वहाँ भी एक विधि sc.WaitforStatus()
कि एक वांछित स्थिति लेता है और एक टाइमआउट, कभी इसका इस्तेमाल नहीं किया लेकिन यह आपकी आवश्यकताओं के अनुरूप हो सकता है।
संपादित करें: स्थिति प्राप्त करने के बाद, स्थिति प्राप्त करने के बाद आपको पहले sc.Refresh()
पर कॉल करने की आवश्यकता होगी।
संदर्भ: ServiceController ऑब्जेक्ट में .NET।
कृपया .NET में ServiceController ऑब्जेक्ट पर एक नज़र डालें।
Oooh ... WMI के माध्यम से स्वयं को रोल करने से भी बेहतर है। मैं अपना जवाब हटा दूंगा। – EBGreen
@EBGreen - मुझे नहीं पता, डब्ल्यूएमआई मार्ग भविष्य में किसी और के लिए उपयोगी हो सकता है, बिल्ली को त्वचा के लिए एक से अधिक तरीके हैं, और यह सब .... – Carl
हां, लेकिन मुझे सच में लगता है कि ServiceController बेहतर है सब से, तो मुझे लगता है कि मैं इसे हटा दूंगा। अगर मैंने अभी जाग नहीं लिया तो मैंने कभी भी डब्ल्यूएमआई का सुझाव नहीं दिया होगा। :) – EBGreen
यहां आपको अपनी स्थानीय मशीन में सभी उपलब्ध सेवाएं और उनकी स्थिति मिलती है।
ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
Console.WriteLine(service.ServiceName+"=="+ service.Status);
}
आप लूप के अंदर service.name प्रॉपर्टी के साथ अपनी सेवा की तुलना कर सकते हैं और आपको अपनी सेवा की स्थिति मिलती है। विवरण के लिए http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx http://msdn.microsoft.com/en-us/library/microsoft.windows.design.servicemanager(v=vs.90).aspx
- 1. मैं कैसे सत्यापित कर सकता हूं कि वेब पेजों को gzipped किया जा रहा है?
- 2. मैं कैसे जांच सकता हूं कि कोई प्रोग्राम पहली बार चल रहा है या नहीं?
- 3. मैं कैसे जांच सकता हूं कि एंड्रॉइड पर कोई ऐप चल रहा है या नहीं?
- 4. मैं कैसे सत्यापित कर सकता हूं कि पर्ल में सरणी (सूची) में कोई मान मौजूद है?
- 5. क्या मैं एक सेवा के रूप में चल रहा हूं
- 6. मैं उस उपयोगकर्ता नाम को पुनर्प्राप्त कैसे करूं जो Windows सेवा चल रहा है?
- 7. मैं कैसे पता लगा सकता हूं कि मैं किस सिद्धांत का चल रहा हूं?
- 8. मैं कैसे निर्धारित कर सकता हूं कि मेरा एएसपी.NET एप्लिकेशन रीसाइक्लिंग क्यों कर रहा है
- 9. मैं कैसे बता सकता हूं कि मैं जेआरबी बनाम रुबी से चल रहा हूं?
- 10. मैं सेवा से आउटपुटडिबगस्ट्रिंग कैसे प्राप्त कर सकता हूं?
- 11. मैं XmlSerializer के आउटपुट को कैसे सत्यापित कर सकता हूं?
- 12. मैं कैसे बता सकता हूं कि कोई फ़ाइल टाइप कर रहा है या नहीं? (PHP)
- 13. मैं कैसे सुनिश्चित कर सकता हूं कि कोई नकली डेटा नहीं भेज रहा है?
- 14. मैं कैसे बता सकता हूं कि कोई उपयोगकर्ता लैपटॉप का उपयोग कर रहा है
- 15. मैं कैसे बता सकता हूं कि कोई वेब क्लाइंट विज्ञापन अवरुद्ध कर रहा है या नहीं?
- 16. मैं कैसे निर्धारित कर सकता हूं कि कोई फ़ंक्शन ग्राफ़
- 17. मैं कैसे पहचान सकता हूं कि जावा ऐप्पल संदर्भ आईडी पास किए बिना चल रहा है?
- 18. मैं कैसे पता लगा सकता हूं कि विशिष्ट डेल्फी आईडीई चल रहा है या नहीं?
- 19. मैं कैसे पता लगा सकता हूं कि TinyMCE का कौन सा संस्करण चल रहा हूं?
- 20. मैं कैसे बता सकता हूं कि मेरा कोड मोनो पर चल रहा है?
- 21. मैं कैसे पता लगा सकता हूं कि साइबेस का कौन सा संस्करण चल रहा है
- 22. मैं कैसे देख सकता हूं कि मेरा रूबी प्रोग्राम किस ऑपरेटिंग सिस्टम पर चल रहा है?
- 23. मैं एक विंडोज सेवा का परीक्षण कैसे कर सकता हूं?
- 24. यह पता लगाने के लिए कि क्या मैं मोनो-सेवा में चल रहा हूं?
- 25. मैं कैसे निर्धारित कर सकता हूं कि मेरा .NET प्रोग्राम कितना मेमोरी उपयोग कर रहा है?
- 26. Windows सेवा
- 27. जांचें कि कोई उपयोगकर्ता वर्तमान में Windows
- 28. मैं अपनी jQuery स्क्रिप्ट को कैसे सत्यापित कर सकता हूं?
- 29. मैं पर्ल में तिथियों को कैसे सत्यापित कर सकता हूं?
- 30. क्या कोई तरीका है कि मैं बता सकता हूं कि स्क्रीन को दबाया जा रहा है
ServiceController.GetServices() एक सरणी पुनर्प्राप्त करता है जिसमें सभी स्थापित सेवा ServiceController ऑब्जेक्ट के रूप में होती है। यह बहुत मदद कर सकता है। – Larry
अच्छी कॉल, मुझे नहीं पता कि मैंने कभी इसका उपयोग किया है या नहीं। यहां तक कि यदि आप इसका कभी भी उपयोग नहीं करते हैं, तो मुझे लगता है कि यह डिबगिंग के लिए उपयोगी होगा यदि कुछ और नहीं – Carl
sc.WaitforStatus() बिल्कुल वही था जो मुझे चाहिए। Thx – edosoft