Vorgehensweise: Programmgesteuertes Schreiben von Diensten

Hinweis

Dieser Artikel gilt nicht für gehostete Dienste in .NET. Die neuesten Inhalte zu Windows-Diensten mit Microsoft.Extensions.Hosting.BackgroundService und die Workerdienstvorlage finden Sie unter:

Wenn Sie nicht die Projektvorlage Windows-Dienst verwenden möchten, können Sie durch Einrichten der Vererbung und anderer Infrastrukturelemente eigene Dienste schreiben. Sobald Sie einen Dienst programmgesteuert erstellen, müssen sie mehrere Schritte ausführen, die andernfalls von der Vorlage behandelt würden:

  • Sie müssen die Dienstklasse einrichten, damit sie von der ServiceBase-Klasse erbt.

  • Sie müssen für das Dienstprojekt eine Main-Methode erstellen, von der die auszuführenden Dienste festgelegt werden. Des Weiteren muss von ihr die Run-Methode für die Dienste aufgerufen werden.

  • Sie müssen die OnStart-Prozedur und die OnStop-Prozedur überschreiben und den Code einfügen, den diese ausführen sollen.

So schreiben Sie einen Dienst programmgesteuert

  1. Erstellen Sie ein leeres Projekt und einen Verweis auf die notwendigen Namespaces, indem Sie die folgenden Schritte ausführen:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Verweise, und klicken Sie dann auf Verweis hinzufügen.

    2. Führen Sie auf der Registerkarte .NET Framework einen Bildlauf zu System.dll durch, und klicken Sie auf Auswählen.

    3. Führen Sie einen Bildlauf zu System.ServiceProcess.dll durch, und klicken Sie auf Auswählen.

    4. Klicken Sie auf OK.

  2. Fügen Sie eine Klasse hinzu, und konfigurieren Sie diese, damit sie von ServiceBase erbt:

    public class UserService1 : ServiceBase
    {
    }
    
    Public Class UserService1
        Inherits System.ServiceProcess.ServiceBase
    End Class
    
  3. Konfigurieren Sie die Dienstklasse, indem Sie folgenden Code hinzufügen:

    public UserService1()
    {
        ServiceName = "MyService2";
        CanStop = true;
        CanPauseAndContinue = true;
        AutoLog = true;
    }
    
    Public Sub New()
        Me.ServiceName = "MyService2"
        Me.CanStop = True
        Me.CanPauseAndContinue = True
        Me.AutoLog = True
    End Sub
    
  4. Erstellen Sie für die Klasse eine Main-Methode, und verwenden Sie diese zum Definieren des Diensts, den diese Klasse enthält. userService1 ist der Name der Klasse:

    public static void Main()
    {
        ServiceBase.Run(new UserService1());
    }
    
    Shared Sub Main()
        System.ServiceProcess.ServiceBase.Run(New UserService1)
    End Sub
    
  5. Überschreiben Sie die OnStart-Methode, und definieren Sie die Verarbeitung beim Starten des Diensts.

    protected override void OnStart(string[] args)
    {
        // Insert code here to define processing.
    }
    
    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Insert code here to define processing.
    End Sub
    
  6. Überschreiben sie alle anderen Methoden, für die Sie benutzerdefinierte Verarbeitung definieren möchten. Schreiben Sie Code, mit dem Sie bestimmen, welche Aktionen vom Dienst in den einzelnen Fällen ausgeführt werden sollen.

  7. Fügen Sie die für die Dienstanwendung erforderlichen Installationsprogramme hinzu. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen von Installern zur Dienstanwendung.

  8. Erstellen Sie das Projekt, indem Sie im Menü Erstellen den Befehl Projektmappe erstellen auswählen.

    Hinweis

    Drücken Sie nicht F5, um das Projekt auszuführen. Dienstprojekte können auf diese Weise nicht ausgeführt werden.

  9. Erstellen Sie ein Setup-Projekt und die benutzerdefinierten Aktionen, um den Dienst zu installieren. Ein Beispiel finden Sie unter Exemplarische Vorgehensweise: Erstellen einer Windows-Dienstanwendung im Komponenten-Designer.

  10. Installieren Sie den Dienst. Weitere Informationen finden Sie unter Vorgehensweise: Installieren und Deinstallieren von Diensten.

Siehe auch