Neben dem service.StartType = ServiceStartMode.Automatic startet mein Service nach der Installation nicht
Lösung
Fügte diesen Code in meinen ProjectInstaller ein
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
base.OnAfterInstall(savedState);
using (var serviceController = new ServiceController(this.serviceInstaller1.ServiceName, Environment.MachineName))
serviceController.Start();
}
Vielen Dank an ScottTx und Francis B.
.net
windows-services
installer
Jader Dias
quelle
quelle
Antworten:
Sie können dies alles in Ihrer ausführbaren Dienstdatei als Reaktion auf Ereignisse tun, die vom InstallUtil-Prozess ausgelöst wurden. Überschreiben Sie das OnAfterInstall-Ereignis, um eine ServiceController-Klasse zum Starten des Dienstes zu verwenden.
http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller.aspx
quelle
Ich habe für das Erstellen eines Windows - Dienstes in C # ein Schritt- für -Schritt - Verfahren geschrieben hier . Es hört sich so an, als wären Sie zumindest bis zu diesem Punkt und jetzt fragen Sie sich, wie Sie den Dienst starten sollen, sobald er installiert ist. Wenn Sie die StartType-Eigenschaft auf Automatisch setzen, wird der Dienst nach dem Neustart Ihres Systems automatisch gestartet, aber nach der Installation wird der Dienst nicht (wie Sie festgestellt haben) automatisch gestartet.
Ich erinnere mich nicht, wo ich es ursprünglich gefunden habe (vielleicht Marc Gravell?), Aber ich habe online eine Lösung gefunden, mit der Sie Ihren Dienst installieren und starten können, indem Sie Ihren Dienst selbst ausführen. Hier ist die Schritt-für-Schritt-Anleitung:
Strukturieren Sie die
Main()
Funktion Ihres Dienstes wie folgt:Hier ist der unterstützende Code:
Weiter mit dem unterstützenden Code ...
Führen Sie zu diesem Zeitpunkt nach der Installation Ihres Dienstes auf dem Zielcomputer Ihren Dienst einfach über die Befehlszeile (wie bei jeder normalen Anwendung) mit dem
-install
Befehlszeilenargument aus, um Ihren Dienst zu installieren und zu starten.Ich denke, ich habe alles behandelt, aber wenn Sie feststellen, dass dies nicht funktioniert, lassen Sie es mich bitte wissen, damit ich die Antwort aktualisieren kann.
quelle
YourServiceType
ist das, wasProjectInstaller
Sie dem Dienst hinzugefügt haben, derServiceInstaller
andServiceProcessInstaller
Visual Studio
Wenn Sie ein Setup-Projekt mit VS erstellen, können Sie eine benutzerdefinierte Aktion erstellen, die eine .NET-Methode zum Starten des Dienstes aufruft. Es wird jedoch nicht wirklich empfohlen, verwaltete benutzerdefinierte Aktionen in einer MSI zu verwenden. Siehe diese Seite .
InstallShield oder Wise
Wenn Sie InstallShield oder Wise verwenden, bieten diese Anwendungen die Möglichkeit, den Dienst zu starten. Bei Wise müssen Sie beispielsweise eine Dienststeuerungsaktion hinzufügen. In dieser Aktion geben Sie an, ob Sie den Dienst starten oder stoppen möchten.
Wix
Mit Wix müssen Sie den folgenden XML-Code unter der Komponente Ihres Dienstes hinzufügen. Weitere Informationen hierzu finden Sie auf dieser Seite .
quelle
Sie müssen am Ende der Sequenz 'ExecuteImmediate' in der MSI eine benutzerdefinierte Aktion hinzufügen, wobei Sie den Komponentennamen der EXE-Datei oder einen Stapel (sc start) als Quelle verwenden. Ich glaube nicht, dass dies mit Visual Studio möglich ist. Möglicherweise müssen Sie dafür ein echtes MSI-Authoring-Tool verwenden.
quelle
Um es direkt nach der Installation zu starten, generiere ich eine Batch-Datei mit installutil, gefolgt von sc start
Es ist nicht ideal, aber es funktioniert ...
quelle
Verwenden Sie die .NET ServiceController-Klasse, um es zu starten, oder geben Sie den Befehlszeilenbefehl ein, um es zu starten --- "net start servicename". So oder so funktioniert.
quelle
Um die Antwort von ScottTx zu ergänzen, finden Sie hier den eigentlichen Code zum Starten des Dienstes, wenn Sie dies auf Microsoft-Weise tun (z. B. mithilfe eines Setup-Projekts usw.).
(Entschuldigen Sie den VB.net-Code, aber das ist es, woran ich festhalte)
Um den obigen Ereignishandler zu erstellen, rufen Sie den ProjectInstaller-Designer auf, in dem sich die beiden Steuerelemente befinden. Klicken Sie auf das Steuerelement ServiceInstaller1. Gehen Sie zum Eigenschaftenfenster unter Ereignisse und dort finden Sie das AfterInstall-Ereignis.
Hinweis: Fügen Sie den obigen Code nicht unter das AfterInstall-Ereignis für ServiceProcessInstaller1 ein. Aus Erfahrung wird es nicht funktionieren. :) :)
quelle
Die einfachste Lösung finden Sie hier install-windows-service-without-installutil-exe von @ Hoàng Long
quelle