Windows Service nach Installation automatisch starten

Hallo miteinander

Ich habe im Visual Studio 2010 einen Dienst implementiert, welchen ich mittels Kommandozeile über ein Initialisierungsargument installiere. Nach der erfolgreichen Installation (mittels Kommandozeile), möchte ich, dass der Dienst automatisch auch gestartet wird. Momentan muss ich jedes Mal in der Dienstverwaltung den Dienst manuell starten (mit “rechtsklick -> starten”).

Ich habe folgenden Code (Codeausschnitt) getestet => Mit dem Event “AfterInstall” (=> Siehe fett markierter Code; Hat nicht funktioniert):

[RunInstaller(true)]
    public class CustomServiceInstaller : Installer
    {
        private ServiceProcessInstaller process;
        private ServiceInstaller service;

        public CustomServiceInstaller()
        {
            process = new ServiceProcessInstaller();
            process.Account = ServiceAccount.LocalSystem;
            service = new ServiceInstaller();
            service.ServiceName = Program.ServiceName;
            service.Description = Program.ServiceDescription;
            service.StartType = ServiceStartMode.Automatic; //starts the service after each restart of the machine automatically


            Installers.Add(process);
            Installers.Add(service);

            **service.AfterInstall += ServiceInstaller_AfterInstall;**
        }
       ** private void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
        {//To start the service automatically after the installation
            ServiceController sc = new ServiceController(Program.ServiceName);
            sc.Start();
        }**
    }

Der Service wird zwar installiert, jedoch kommt kein Hinweis oder eine Meldung im cmd, dass er den Service versucht zu starten.

Was löst den “AfterInstall”-Event aus? Kann es sein, dass dieser bei mir aus irgendeinem Grunde gar nicht erst ausgelöst wird?
Gibt es andere Möglichkeiten, den Dienst nach der Installation automatisch zu starten? (z.B. habe ich den “Commit”-Event schon getestet => ohne Erfolg)

Ich bin über jede Antwort sehr dankbar!

Freundliche Grüsse, Masler37

kleiner Strohhalm-Versuch mal wieder, letztes Mal hat es geklappt:
während in diesem Link hier


deine Variante zwar auch vorkommt in der zweiten Antwort,

ist in der wichtigeren ersten Antowort aber noch zusätzlich von einem InstallEventHandler die Rede,
auch bei anderen Links häufiger anzutreffen, etwa

Ah sorry, diese Variante mit dem InstallEventHandler habe ich auch schon probiert… funktioniert nicht…

Und dein anderer Link hat mir leider auch nicht weitergeholfen. Ich frage mich einfach:

Wird der Event “AfterInstall” wirklich ausgelöst?! Ich denke eher nicht! Wie wird dieser Event also ausgelöst?!

=> Habe vor Kurzem von einem “OnAfterInstall”-Methode gelesen, welche den Event AfterInstall auslösen soll. Auf der folgenden Seite (Siehe Link) steht zuoberst “Raises the AfterInstall event.”… was auf Deutsch soviel heisst wie “Löst den AfterInstall Event aus”. Stimmt doch, oder nicht?
http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.onafterinstall(v=vs.110).aspx

Habe die “OnAfterInstall”-Methode jedoch noch nicht genauer analysiert, bzw. kenne deren Funktionsweise noch nicht!

Vielleicht ist die Methode “OnAfterInstall” aber der Schlüssel zur Lösung vom Problem…

Hey Leute!

Habe das Ganze nochmals getestet. Ich kann nun versichern, dass der Event AfterInstall nach der Installation doch ausgeführt wird…

Das heisst, ich komme in diese Methode:

private void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
{//To start the service automatically after the installation
ServiceController sc = new ServiceController(Program.ServiceName);
sc.Start();
}

Wieso aber kann nun sc.Start() meinen Dienst nicht starten?! => Den Servicenamen gebe ich zu 100% korrekt an, und sc.Start() benötigt in meinem Fall keine Parameter, oder?

Gruss

*** Edit ***

Problem behoben…

Ich hatte ein nicht endenden Codeblock in der „OnStart“-Methode vom Service, weshalb der Service beim Starten in den Modus „StartPending“ gekommen ist.

Das Problem lag demnach also nicht am Event „AfterInstall“ oder dem ServiceController, sondern an meinem Code, welcher ein Timeout in der Methode „OnStart“ verursacht hat.

Danke trotzdem für die Hilfe SlaterB. :slight_smile:

Grüsse, Masler37