2011-04-14 1 views
1

J'utilise ServiceController pour redémarrer le serveur Windows. Voici mon code C#.ServiceController juste coincé sans aucune exception

ServiceController service = new ServiceController("ServiceName"); 
service.Stop(); 
service.WaitForStatus(ServiceControllerStatus.Stopped, 15000); 
service.Start(); 
service.WaitForStatus(ServiceControllerStatus.Running, 15000); 

Je fonctionne très bien sur ma machine locale, si le service « ServiceName » n'existe pas, il émet une exception et cela est ok.
Mais sur le serveur là je besoin de ce code à courir si le service avec « ServiceName » n'existe pas que je ne reçois aucune exception et le code juste coincé ici:

service.Stop(); 

et il attend toujours ... En conséquence, je ne peux pas attraper cela, je ne peux rien faire, il est juste coincé.
Quelqu'un peut-il m'aider?

Répondre

1

Au lieu de se fier à une exception si votre code ne peut pas trouver le service de cette façon:

ServiceController service = ServiceController.GetServices() 
     .Where(s => s.ServiceName == "ServiceName") 
     .SingleOrDefault(); 

    if (service != null) 
    { 
     service.Stop(); 
     service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(15)); 
     service.Start(); 
     service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(15)); 
    } 
    else 
    { 
     // Couldn't find service 
    } 

REMARQUE: je devais changer la signature de ServiceControllerStatus.WaitForStaus d'utiliser un timespan

+0

En tant que en fait, je besoin suivant: 'service ServiceController = ServiceController.GetServices ("MachineName") .Lorsque (s => s.ServiceName == "ServiceName") .SingleOrDefault();' et si "MachineName" ne n'existe pas il coincé ici – Vladimir

+0

Le Mach La surcharge ineName est utilisée si vous essayez de contrôler les services sur une machine différente du code d'exécution. Si vous devez inclure le nom de la machine, je suppose que vous essayez de contrôler les services sur une machine séparée, l'utilisateur qui exécute le code a-t-il accès à la machine en question? – Mike

+0

Il ne le fait pas. Mais, je pense, dans ce cas, je devrais obtenir une exception (je reçois une exception localement) Mais sur le serveur distant, ce code est censé être en cours d'exécution, je ne reçois aucune exception :(. – Vladimir

Questions connexes