2016-11-07 4 views
0

Ich versuche, einen Dienst in einer benutzerdefinierten Aktion für meine WiX-Setup für ein Projekt C# zu starten.Ich kann keinen Dienst in WiX starten Benutzerdefinierte Aktion

Zuerst habe ich überprüfen, ob Dienst gestartet wird:

[CustomAction] 
public static ActionResult StopService(Session session) 
{ 
    ServiceController MyService = null; 
    try 
    { 
     MyService = new ServiceController("MyService"); 
     if (MyService != null) &&(MyService.Status != ServiceControllerStatus.Stopped)) 
     { 
      MyService.Stop(); 
      MyService.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 2, 0)); 
     } 
     session.Log("Stop service"); 
    } 
    catch (Exception ex) 
    { 
     session.Log(ex.ToString()); 
    } 
} 

Aber es gibt eine Ausnahme, wenn ich versuche, den Status zu erhalten (MyService.Status):

System.InvalidOperationException: Impossible d'ouvrir le service Mein Dienst über die Ordinateur '.'. ---> System.ComponentModel.Win32Exception: Le service spécifié n'existe pas ist in der Warteschlange installier --- Fin de la Spur des Pfahls d'exception interne --- System.ServiceProcess.ServiceController. GetServiceHandle (Int32 DesiredAccess) à System.ServiceProcess.ServiceController.GenerateStatus() à System.ServiceProcess.ServiceController.get_Status() à CustomAction.CustomActions.StopService (Session Sitzung)

Übersetzung: „Kann nicht Öffnen Sie den Dienst MyService auf diesem Computer -> Angegebener Dienst existiert nicht als installierter Dienst

Wie kann ich prüfen, ob ein Service installiert ist? (Ich habe überprüft, MyService ist nicht null)

Antwort

0

Es bedeutet, dass der angegebene Dienst "MyService" nicht auf Ihrem Computer installiert ist. Sie können dies überprüfen, indem Sie auf Start > Run > services.msc gehen.

auch stattdessen ein direktes Objekt von Servicecontroller zu erstellen, können Sie stattdessen eine Liste der installierten Dienste greifen und Ihren Dienst aus dieser Liste suchen:

bool DoesServiceExist(string serviceName) 
    { 
     return ServiceController.GetServices().Any(serviceController => serviceController.ServiceName.Equals(serviceName)); 
    } 

Referenzen: https://stackoverflow.com/a/23800234

Verwandte Themen