ฉันมีแอปพลิเคชันใน C # (2.0 ทำงานบน XP ฝังตัว) ที่กำลังสื่อสารกับ 'watchdog' ที่ใช้งานเป็นบริการ Windows เมื่ออุปกรณ์บู๊ตบริการนี้มักจะใช้เวลาในการเริ่มต้น ฉันต้องการตรวจสอบจากรหัสของฉันหากบริการกำลังทำงานอยู่ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมีแอปพลิเคชันใน C # (2.0 ทำงานบน XP ฝังตัว) ที่กำลังสื่อสารกับ 'watchdog' ที่ใช้งานเป็นบริการ Windows เมื่ออุปกรณ์บู๊ตบริการนี้มักจะใช้เวลาในการเริ่มต้น ฉันต้องการตรวจสอบจากรหัสของฉันหากบริการกำลังทำงานอยู่ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ฉันเดาว่าสิ่งนี้จะได้ผล:
เพิ่มSystem.ServiceProcess
ลงในการอ้างอิงโครงการของคุณ (อยู่ในแท็บ. NET)
using System.ServiceProcess;
ServiceController sc = new ServiceController(SERVICENAME);
switch (sc.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
ที่นี่คุณจะได้รับบริการและสถานะทั้งหมดในเครื่องท้องถิ่นของคุณ
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