web-dev-qa-db-fra.com

Démarrer le service depuis Form App c #

Comment puis-je démarrer et arrêter un service Windows à partir d'une application de formulaire c #?

33
AlexandruC

Ajoutez une référence à System.ServiceProcess.dll. Vous pouvez ensuite utiliser le ServiceController class.

// Check whether the Alerter service is started.
ServiceController sc  = new ServiceController();
sc.ServiceName = "Alerter";
Console.WriteLine("The Alerter service status is currently set to {0}", 
                   sc.Status.ToString());

if (sc.Status == ServiceControllerStatus.Stopped)
{
   // Start the service if the current status is stopped.
   Console.WriteLine("Starting the Alerter service...");
   try 
   {
      // Start the service, and wait until its status is "Running".
      sc.Start();
      sc.WaitForStatus(ServiceControllerStatus.Running);

      // Display the current service status.
      Console.WriteLine("The Alerter service status is now set to {0}.", 
                         sc.Status.ToString());
   }
   catch (InvalidOperationException)
   {
      Console.WriteLine("Could not start the Alerter service.");
   }
}
62
John Koerner

Ajoutez d’abord une référence à l’assemblage System.ServiceProcess.

Commencer:

ServiceController service = new ServiceController("YourServiceName");
service.Start();
var timeout = new TimeSpan(0, 0, 5); // 5seconds
service.WaitForStatus(ServiceControllerStatus.Running, timeout);

Arrêter:

ServiceController service = new ServiceController("YourServiceName");
service.Stop();
 var timeout = new TimeSpan(0, 0, 5); // 5seconds
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);

Les deux exemples montrent comment attendre que le service ait atteint un nouvel état (en cours d'exécution, arrêté, etc.). Le paramètre de délai d'attente dans WaitForStatus est facultatif.

19
Christophe Geers

Vous pouvez le faire comme ceci, Détails de Service Controller

ServiceController sc = new ServiceController("your service name");
if (sc.Status == ServiceControllerStatus.Stopped)
{
  sc.Start();

}

De même, vous pouvez arrêter d'utiliser la méthode stop

  sc.Stop();
2
Adil

il y a un plus sale, mais même pareil ..
il suffit d'exécuter la commande shell 

NET STOP "MYSERVICENAME"
NET START "MYSERVICENAME"
1
Tomer W
// Check whether the U-TEST RTC service is started.
        ServiceController sc = new ServiceController();
        sc.ServiceName = "U-TEST RTC";
        m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgStatusService"), sc.Status.ToString()), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);

        if (sc.Status == ServiceControllerStatus.Stopped)
        {
            m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgStartService")), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
            try
            {
                // Start the service, and wait until its status is "Running".
                sc.Start();
                var timeout = new TimeSpan(0, 0, 5); // 5seconds
                sc.WaitForStatus(ServiceControllerStatus.Running, timeout);
                m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgNowService"), sc.Status.ToString()), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
            }
            catch (InvalidOperationException)
            {
                m_objMainChainRTC.m_objUC.ValidationLogMessages(String.Format(LocalizeDictionary.Instance.GetLocalizedValue("MsgExceptionStartService")), Alstom.Automation.Forms.ViewModels.RTCAutomationViewModel.ColorLog.Log);
            }
        }
0
FAREH