Rubrik: System/Windows | VB-Versionen: VB2005, VB2008 | 30.08.10 |
Windows Dienst in VB Express .NET einfach erstellen Anleitung, wie man in Visual Basic .NET einen einfachen Windows Dienst erstellen kann. | ||
Autor: Patrick Becker | Bewertung: | Views: 30.363 |
ohne Homepage | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt |
Im beigefügten Download finden Sie eine genaue Anleitung, wie man in VB Express Windows-Dienste einfach erstellen und ausführen kann:
Im Download enthalten sind:
- Projekt vorlage + Dienst Installer
- Toolbox elemente zum De/Installieren des Dienstes
- Genaue Anleitung zum benutzen und bearbeiten der Projekt Vorlage auch für Anfänger geeignet
Weitere Erklärung:
http://msdn.microsoft.com/de-de/library/cc405497.aspx
Quellcode Installer: (Modul mit dem Namen Service1.vb)
Imports System.ComponentModel Imports System.Configuration.Install Imports System.ServiceProcess <RunInstaller(True)> Public Class Installer1 Inherits System.Configuration.Install.Installer ' Die Variable ServiceName muss der ServiceName- ' Eigenschaft Ihres Dienstes entsprechen: Private ServiceName As String = "Windows Dienst" ' Klartextbeschreibung des Dienstes: Private ServiceDescription = "Windows Dienst" #Region " Component Designer generated code " Public Sub New() ' Installer-Objekte erzeugen: Dim ProcessInstaller As ServiceProcessInstaller _ = New ServiceProcessInstaller Dim ServiceInstaller As ServiceInstaller _ = New ServiceInstaller ' Der Dienst soll unter dem lokalen System-Account laufen: ProcessInstaller.Account = ServiceAccount.LocalSystem ' Der Dienst soll manuell gestartet werden: ServiceInstaller.StartType = ServiceStartMode.Manual ' Die ServiceName-Eigenschaft muss der ServiceName- ' Eigenschaft Ihres Dienstes entsprechen: ServiceInstaller.ServiceName = ServiceName ' Die Installer-Objekte der Installers-Collection hinzufügen: Installers.Add(ServiceInstaller) Installers.Add(ProcessInstaller) End Sub ' Workaround zur Hinterlegung der Dienstbeschreibung Public Overrides Sub Install(ByVal stateSaver As _ System.Collections.IDictionary) ' Der Klasse ServiceInstaller des .NET Frameworks 1.0 fehlt ' eine Eigenschaft, um die Klartextbeschreibung eines ' Dienstes in der Registry zu hinterlegen. Dieser Workaround ' trägt die Klartextbeschreibung nach Installation des ' Dienstes in die Registry unter dem Zweig ' HKEY_LOCAL_MACHINE\System\CurrentControlSet\... ' ...Services\[Dienstname]\ ' als Wert des Schlüssels "Description" ein. ' Ein Löschen bei der Deinstallation des Dienstes ist nicht ' notwendig, da die Deinstallation den gesamten Schlüssel ' [Dienstname] mit allen enthaltenen Werten löscht. Dim RegKey As Microsoft.Win32.RegistryKey ' Installation durchführen MyBase.Install(stateSaver) ' Danach die Klartextbeschreibung in der Registry ablegen RegKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( "System").OpenSubKey( _ "CurrentControlSet").OpenSubKey( _ "Services").OpenSubKey( _ ServiceName, True) RegKey.SetValue("Description", ServiceDescription) RegKey.Close() End Sub ' Installer overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub ' Required by the Component Designer Private components As System.ComponentModel.IContainer ' NOTE: The following procedure is required by the Component Designer ' It can be modified using the Component Designer. ' Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() components = New System.ComponentModel.Container End Sub #End Region End Class
Quellcode Service: (Modul Name Service1.vb)
Imports System.ServiceProcess Public Class Service1 Inherits System.ServiceProcess.ServiceBase #Region " Component Designer generated code " Public Sub New() MyBase.New() ' This call is required by the Component Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call End Sub ' UserService overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub ' The main entry point for the process <MTAThread()> _ Shared Sub Main() Dim ServicesToRun() As System.ServiceProcess.ServiceBase ' More than one NT Service may run within the same process. To add ' another service to this process, change the following line to ' create a second service object. For example, ' ' ServicesToRun = New System.ServiceProcess.ServiceBase () _ ' {New Service1, New MySecondUserService} ' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1} System.ServiceProcess.ServiceBase.Run(ServicesToRun) End Sub ' Required by the Component Designer Private components As System.ComponentModel.IContainer ' NOTE: The following procedure is required by the Component Designer ' It can be modified using the Component Designer. ' Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() components = New System.ComponentModel.Container() Me.ServiceName = "Service1" End Sub #End Region Protected Overrides Sub OnStart(ByVal args() As String) ' Add code here to start your service. This method should set things ' in motion so your service can do its work. EventLog.WriteEntry("Windows Dienst Nachricht: Hallo", EventLogEntryType.Information) End Sub Protected Overrides Sub OnStop() ' Add code here to perform any tear-down necessary to stop your service. End Sub End Class