Zelfstudie: Een Windows-service-app maken

Waarschuwing

Deze documentatie is niet bedoeld voor de nieuwste versie van Windows-service. Zie voor de meest recente inhoud in Windows Services met BackgroundService en de sjabloon Worker Service:

In dit artikel ziet u hoe u een Windows-service-app maakt in Visual Studio die berichten naar een gebeurtenislogboek schrijft.

Een service maken

Maak eerst het project en stel de waarden in die nodig zijn om de service correct te laten functioneren.

  1. Selecteer in het menu Bestand van Visual Studio de optie Nieuw>project (of druk op Ctrl+Shift+N) om het venster Nieuw project te openen.

  2. Zoek en selecteer de projectsjabloon Windows-service (.NET Framework).

    Notitie

    Als u de Windows-servicesjabloon niet ziet, moet u mogelijk de workload .NET Desktop Development installeren met behulp van Visual Studio Installer.

  3. Bij Naam voert u MyNewService in en selecteert u OK.

    Het tabblad Ontwerpen wordt weergegeven (Service1.cs [Ontwerp] of Service1.vb [Ontwerp]).

    De projectsjabloon bevat een onderdeelklasse met de naam Service1 die wordt overgenomen van System.ServiceProcess.ServiceBase. Het bevat een groot deel van de basisservicecode, zoals de code om de service te starten.

De naam van de service wijzigen

Wijzig de naam van de service van Service1 in MyNewService.

  1. Selecteer in Solution ExplorerService1.cs of Service1.vb en kies Naam wijzigen in het snelmenu. Wijzig de naam van het bestand in MyNewService.cs of MyNewService.vb en druk op Enter

    Er wordt een pop-upvenster weergegeven waarin u wordt gevraagd of u de naam van alle verwijzingen naar het code-element Service1 wilt wijzigen.

  2. Selecteer Ja in het pop-upvenster.

    Prompt naam wijzigen

  3. Selecteer op het tabblad Ontwerpde optie Eigenschappen in het snelmenu. Wijzig in het venster Properties de waarde ServiceName in MyNewService.

    Service-eigenschappen

  4. Selecteer Alles opslaan in het menu Bestand .

Functies toevoegen aan de service

In deze sectie voegt u een aangepast gebeurtenislogboek toe aan de Windows-service. Het EventLog onderdeel is een voorbeeld van het type onderdeel dat u kunt toevoegen aan een Windows-service.

Functionaliteit voor aangepast gebeurtenislogboek toevoegen

  1. Kies in Solution Explorer in het snelmenu voor MyNewService.cs of MyNewService.vb de optie Weergave Designer.

  2. Vouw in Werksetde optie Onderdelen uit en sleep het onderdeel EventLog naar het tabblad Service1.cs [Ontwerp] of Service1.vb [Ontwerp].

  3. Kies in Solution Explorer in het snelmenu voor MyNewService.cs of MyNewService.vb de optie Code weergeven.

  4. Een aangepast gebeurtenislogboek definiëren.

    Bewerk voor C# de bestaande MyNewService() constructor zoals weergegeven in het volgende codefragment. Voeg voor Visual Basic de New() constructor toe, zoals wordt weergegeven in het volgende codefragment.

    public MyNewService()
    {
        InitializeComponent();
        eventLog1 = new System.Diagnostics.EventLog();
        if (!System.Diagnostics.EventLog.SourceExists("MySource"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "MySource","MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";
    }
    
    ' To access the constructor in Visual Basic, select New from the
    ' method name drop-down list. 
    Public Sub New()
        MyBase.New()
        InitializeComponent()
        Me.EventLog1 = New System.Diagnostics.EventLog
        If Not System.Diagnostics.EventLog.SourceExists("MySource") Then
            System.Diagnostics.EventLog.CreateEventSource("MySource",
            "MyNewLog")
        End If
        EventLog1.Source = "MySource"
        EventLog1.Log = "MyNewLog"
    End Sub
    
  5. Voeg een using instructie toe aan MyNewService.cs (als deze nog niet bestaat) of een Imports instructie aan MyNewService.vb voor de System.Diagnostics naamruimte:

    using System.Diagnostics;
    
    Imports System.Diagnostics
    
  6. Selecteer Alles opslaan in het menu Bestand .

Definiëren wat er gebeurt wanneer de service wordt gestart

Zoek OnStart de methode in de code-editor voor MyNewService.cs of MyNewService.vb. Visual Studio heeft automatisch een lege methodedefinitie gemaakt toen u het project maakte. Voeg code toe waarmee een vermelding naar het gebeurtenislogboek wordt geschreven wanneer de service wordt gestart:

protected override void OnStart(string[] args)
{
    eventLog1.WriteEntry("In OnStart.");
}
' To access the OnStart in Visual Basic, select OnStart from the
' method name drop-down list. 
Protected Overrides Sub OnStart(ByVal args() As String)
    EventLog1.WriteEntry("In OnStart")
End Sub

Navragen

Omdat een servicetoepassing is ontworpen om lang te worden uitgevoerd, wordt het systeem, dat u in de OnStart methode hebt ingesteld, meestal gecontroleerd of bewaakt. De OnStart methode moet terugkeren naar het besturingssysteem nadat de bewerking van de service is gestart, zodat het systeem niet wordt geblokkeerd.

Als u een eenvoudig polling-mechanisme wilt instellen, gebruikt u het System.Timers.Timer onderdeel. De timer genereert een Elapsed gebeurtenis met regelmatige tussenpozen, waarna uw service de bewaking kan uitvoeren. U gebruikt het Timer onderdeel als volgt:

  • Stel de eigenschappen van het Timer onderdeel in de MyNewService.OnStart -methode in.
  • Start de timer door de Start methode aan te roepen.
Het pollingmechanisme instellen
  1. Voeg een using instructie toe aan MyNewService.cs of een Imports instructie aan MyNewService.vb voor de System.Timers naamruimte:

    using System.Timers;
    
    Imports System.Timers
    
  2. Voeg de volgende code toe in de MyNewService.OnStart gebeurtenis om het pollingmechanisme in te stellen:

    // Set up a timer that triggers every minute.
    Timer timer = new Timer();
    timer.Interval = 60000; // 60 seconds
    timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
    timer.Start();
    
    ' Set up a timer that triggers every minute.
    Dim timer As Timer = New Timer()
    timer.Interval = 60000 ' 60 seconds
    AddHandler timer.Elapsed, AddressOf Me.OnTimer
    timer.Start()
    
  3. Voeg in de MyNewService klasse een lidvariabele toe. Deze bevat de id van de volgende gebeurtenis die in het gebeurtenislogboek moet worden geschreven:

    private int eventId = 1;
    
    Private eventId As Integer = 1
    
  4. Voeg in de MyNewService klasse de methode toe om de OnTimerTimer.Elapsed gebeurtenis af te handelen:

    public void OnTimer(object sender, ElapsedEventArgs args)
    {
        // TODO: Insert monitoring activities here.
        eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);
    }
    
    Private Sub OnTimer(sender As Object, e As Timers.ElapsedEventArgs)
       ' TODO: Insert monitoring activities here.
       eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId)
       eventId = eventId + 1
    End Sub
    

In plaats van al uw werk op de hoofdthread uit te voeren, kunt u taken uitvoeren met behulp van achtergrondwerkthreads. Voor meer informatie raadpleegt u System.ComponentModel.BackgroundWorker.

Definiëren wat er gebeurt wanneer de service wordt gestopt

Voeg een regel code in de OnStop methode in waarmee een vermelding aan het gebeurtenislogboek wordt toegevoegd wanneer de service wordt gestopt:

protected override void OnStop()
{
    eventLog1.WriteEntry("In OnStop.");
}
Protected Overrides Sub OnStop()
    EventLog1.WriteEntry("In OnStop.")
End Sub

Andere acties voor de service definiëren

U kunt de OnPausemethoden , OnContinueen OnShutdown overschrijven om aanvullende verwerking voor uw onderdeel te definiëren.

De volgende code laat zien hoe u de OnContinue methode in de MyNewService klasse kunt overschrijven:

protected override void OnContinue()
{
    eventLog1.WriteEntry("In OnContinue.");
}
Protected Overrides Sub OnContinue()
    EventLog1.WriteEntry("In OnContinue.")
End Sub

Servicestatus instellen

Services rapporteren hun status aan Service Control Manager , zodat een gebruiker kan zien of een service correct werkt. Standaard rapporteert een service die overneemt van ServiceBase een beperkte set statusinstellingen, waaronder SERVICE_STOPPED, SERVICE_PAUSED en SERVICE_RUNNING. Als het even duurt voordat een service is opgestart, is het handig om een SERVICE_START_PENDING status te rapporteren.

U kunt de SERVICE_START_PENDING- en SERVICE_STOP_PENDING-statusinstellingen implementeren door code toe te voegen waarmee de functie Windows SetServiceStatus wordt aangeroepen.

Service in behandelingsstatus implementeren

  1. Voeg een using instructie toe aan MyNewService.cs of een Imports instructie aan MyNewService.vb voor de System.Runtime.InteropServices naamruimte:

    using System.Runtime.InteropServices;
    
    Imports System.Runtime.InteropServices
    
  2. Voeg de volgende code toe aan MyNewService.cs of MyNewService.vb om de ServiceState waarden te declareren en een structuur toe te voegen voor de status, die u gebruikt in een platform-aanroep:

    public enum ServiceState
    {
        SERVICE_STOPPED = 0x00000001,
        SERVICE_START_PENDING = 0x00000002,
        SERVICE_STOP_PENDING = 0x00000003,
        SERVICE_RUNNING = 0x00000004,
        SERVICE_CONTINUE_PENDING = 0x00000005,
        SERVICE_PAUSE_PENDING = 0x00000006,
        SERVICE_PAUSED = 0x00000007,
    }
    
    [StructLayout(LayoutKind.Sequential)]
    public struct ServiceStatus
    {
        public int dwServiceType;
        public ServiceState dwCurrentState;
        public int dwControlsAccepted;
        public int dwWin32ExitCode;
        public int dwServiceSpecificExitCode;
        public int dwCheckPoint;
        public int dwWaitHint;
    };
    
    Public Enum ServiceState
        SERVICE_STOPPED = 1
        SERVICE_START_PENDING = 2
        SERVICE_STOP_PENDING = 3
        SERVICE_RUNNING = 4
        SERVICE_CONTINUE_PENDING = 5
        SERVICE_PAUSE_PENDING = 6
        SERVICE_PAUSED = 7
    End Enum
    
    <StructLayout(LayoutKind.Sequential)>
    Public Structure ServiceStatus
        Public dwServiceType As Long
        Public dwCurrentState As ServiceState
        Public dwControlsAccepted As Long
        Public dwWin32ExitCode As Long
        Public dwServiceSpecificExitCode As Long
        Public dwCheckPoint As Long
        Public dwWaitHint As Long
    End Structure
    

    Notitie

    Service Control Manager maakt gebruik van de dwWaitHint leden en dwCheckpoint van de SERVICE_STATUS-structuur om te bepalen hoe lang moet worden gewacht totdat een Windows-service wordt gestart of afgesloten. Als uw OnStart methoden en OnStop lang duren, kan uw service meer tijd aanvragen door opnieuw aan te roepen SetServiceStatus met een incrementele dwCheckPoint waarde.

  3. Declareer in de MyNewService klasse de functie SetServiceStatus met behulp van platform-aanroep:

    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool SetServiceStatus(System.IntPtr handle, ref ServiceStatus serviceStatus);
    
    Declare Auto Function SetServiceStatus Lib "advapi32.dll" (ByVal handle As IntPtr, ByRef serviceStatus As ServiceStatus) As Boolean
    
  4. Als u de SERVICE_START_PENDING-status wilt implementeren, voegt u de volgende code toe aan het begin van de OnStart methode:

    // Update the service state to Start Pending.
    ServiceStatus serviceStatus = new ServiceStatus();
    serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
    serviceStatus.dwWaitHint = 100000;
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    ' Update the service state to Start Pending.
    Dim serviceStatus As ServiceStatus = New ServiceStatus()
    serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING
    serviceStatus.dwWaitHint = 100000
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    
  5. Voeg code toe aan het einde van de OnStart methode om de status in te stellen op SERVICE_RUNNING:

    // Update the service state to Running.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    ' Update the service state to Running.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    
  6. (Optioneel) Als OnStop een langdurige methode is, herhaalt u deze procedure in de OnStop methode. Implementeer de SERVICE_STOP_PENDING status en retourneer de SERVICE_STOPPED status voordat de OnStop methode wordt afgesloten.

    Bijvoorbeeld:

    // Update the service state to Stop Pending.
    ServiceStatus serviceStatus = new ServiceStatus();
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING;
    serviceStatus.dwWaitHint = 100000;
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    // Update the service state to Stopped.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOPPED;
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    ' Update the service state to Stop Pending.
    Dim serviceStatus As ServiceStatus = New ServiceStatus()
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING
    serviceStatus.dwWaitHint = 100000
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    
    ' Update the service state to Stopped.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOPPED
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    

Installatieprogramma's toevoegen aan de service

Voordat u een Windows-service uitvoert, moet u deze installeren, waardoor deze wordt geregistreerd bij Service Control Manager. Voeg installatieprogramma's toe aan uw project om de registratiegegevens te verwerken.

  1. Kies in Solution Explorer in het snelmenu voor MyNewService.cs of MyNewService.vbde optie Weergave Designer.

  2. Selecteer in de ontwerpweergave het achtergrondgebied en kies vervolgens Installatieprogramma toevoegen in het snelmenu.

    Visual Studio voegt standaard een onderdeelklasse met de naam ProjectInstaller, die twee installatieprogramma's bevat, toe aan uw project. Deze installatieprogramma's zijn bedoeld voor uw service en voor het bijbehorende proces van de service.

  3. Selecteer in de ontwerpweergave voor ProjectInstallerserviceInstaller1 voor een Visual C#-project of ServiceInstaller1 voor een Visual Basic-project en kies vervolgens Eigenschappen in het snelmenu.

  4. Controleer in het venster Properties of de ServiceName eigenschap is ingesteld op MyNewService.

  5. Voeg tekst toe aan de Description eigenschap, zoals een voorbeeldservice.

    Deze tekst wordt weergegeven in de kolom Beschrijving van het venster Services en beschrijft de service aan de gebruiker.

    Servicebeschrijving in het venster Services.

  6. Voeg tekst toe aan de DisplayName eigenschap. Bijvoorbeeld MyNewService-weergavenaam.

    Deze tekst wordt weergegeven in de kolom Weergavenaam van het venster Services . Deze naam kan afwijken van de ServiceName eigenschap, de naam die het systeem gebruikt (bijvoorbeeld de naam die u gebruikt voor de net start opdracht om uw service te starten).

  7. Stel de StartType eigenschap in op Automatic in de vervolgkeuzelijst.

  8. Wanneer u klaar bent, moeten de vensters Eigenschappen eruitzien zoals in de volgende afbeelding:

    Eigenschappen van installatieprogramma's voor een Windows-service

  9. Kies in de ontwerpweergave voor ProjectInstallerde optie serviceProcessInstaller1 voor een Visual C#-project of ServiceProcessInstaller1 voor een Visual Basic-project en kies eigenschappen in het snelmenu. Stel de Account eigenschap in op LocalSystem in de vervolgkeuzelijst.

    Met deze instelling wordt de service geïnstalleerd en uitgevoerd met behulp van het lokale systeemaccount.

    Belangrijk

    Het LocalSystem account heeft brede machtigingen, waaronder de mogelijkheid om naar het gebeurtenislogboek te schrijven. Wees voorzichtig met dit account, omdat dit het risico op aanvallen van schadelijke software kan vergroten. Voor andere taken kunt u overwegen het LocalService account te gebruiken, dat als een niet-bevoegde gebruiker op de lokale computer fungeert en anonieme referenties aan elke externe server presenteert. Dit voorbeeld mislukt als u het LocalService account probeert te gebruiken, omdat het toestemming nodig heeft om naar het gebeurtenislogboek te schrijven.

Zie Procedure: Installatieprogramma's toevoegen aan uw servicetoepassing voor meer informatie over installatieprogramma's.

(Optioneel) Opstartparameters instellen

Notitie

Voordat u besluit opstartparameters toe te voegen, moet u nagaan of dit de beste manier is om informatie door te geven aan uw service. Hoewel ze eenvoudig te gebruiken en parseren zijn en een gebruiker ze gemakkelijk kan overschrijven, zijn ze mogelijk moeilijker te vinden en te gebruiken zonder documentatie. Als voor uw service meer dan slechts enkele opstartparameters zijn vereist, moet u in plaats daarvan het register of een configuratiebestand gebruiken.

Een Windows-service kan opdrachtregelargumenten of opstartparameters accepteren. Wanneer u code toevoegt aan opstartparameters voor processen, kan een gebruiker uw service starten met eigen aangepaste opstartparameters in het venster met service-eigenschappen. Deze opstartparameters blijven echter niet behouden wanneer de service de volgende keer wordt gestart. Als u opstartparameters permanent wilt instellen, stelt u deze in het register in.

Elke Windows-service heeft een registervermelding onder de subsleutelHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services . Gebruik onder de subsleutel van elke service de subsleutel Parameters om informatie op te slaan waartoe uw service toegang heeft. U kunt toepassingsconfiguratiebestanden voor een Windows-service op dezelfde manier gebruiken als voor andere typen programma's. Zie voor voorbeeldcode ConfigurationManager.AppSettings.

Opstartparameters toevoegen

  1. Selecteer Program.cs of MyNewService.Designer. vb en kies vervolgens Code weergeven in het snelmenu. Wijzig in de Main methode de code om een invoerparameter toe te voegen en geef deze door aan de serviceconstructor:

    static void Main(string[] args)
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new MyNewService(args)
        };
        ServiceBase.Run(ServicesToRun);
    }
    
    Shared Sub Main(ByVal cmdArgs() As String)
        Dim ServicesToRun() As System.ServiceProcess.ServiceBase = New System.ServiceProcess.ServiceBase() {New MyNewService(cmdArgs)}
        System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End Sub
    
  2. Wijzig in MyNewService.cs of MyNewService.vb de MyNewService constructor om de invoerparameter als volgt te verwerken:

    using System.Diagnostics;
    
    public MyNewService(string[] args)
    {
        InitializeComponent();
    
        string eventSourceName = "MySource";
        string logName = "MyNewLog";
    
        if (args.Length > 0)
        {
           eventSourceName = args[0];
        }
    
        if (args.Length > 1)
        {
            logName = args[1];
        }
    
        eventLog1 = new EventLog();
    
        if (!EventLog.SourceExists(eventSourceName))
        {
            EventLog.CreateEventSource(eventSourceName, logName);
        }
    
        eventLog1.Source = eventSourceName;
        eventLog1.Log = logName;
    }
    
    Imports System.Diagnostics
    
    Public Sub New(ByVal cmdArgs() As String)
        InitializeComponent()
        Dim eventSourceName As String = "MySource"
        Dim logName As String = "MyNewLog"
        If (cmdArgs.Count() > 0) Then
            eventSourceName = cmdArgs(0)
        End If
        If (cmdArgs.Count() > 1) Then
            logName = cmdArgs(1)
        End If
        eventLog1 = New EventLog()
        If (Not EventLog.SourceExists(eventSourceName)) Then
            EventLog.CreateEventSource(eventSourceName, logName)
        End If
        eventLog1.Source = eventSourceName
        eventLog1.Log = logName
    End Sub
    

    Met deze code wordt de naam van de gebeurtenisbron en het logboek ingesteld op basis van de opstartparameters die de gebruiker levert. Als er geen argumenten worden opgegeven, worden standaardwaarden gebruikt.

  3. Als u de opdrachtregelargumenten wilt opgeven, voegt u de volgende code toe aan de ProjectInstaller klasse in ProjectInstaller.cs of ProjectInstaller.vb:

    protected override void OnBeforeInstall(IDictionary savedState)
    {
        string parameter = "MySource1\" \"MyLogFile1";
        Context.Parameters["assemblypath"] = "\"" + Context.Parameters["assemblypath"] + "\" \"" + parameter + "\"";
        base.OnBeforeInstall(savedState);
    }
    
    Protected Overrides Sub OnBeforeInstall(ByVal savedState As IDictionary)
        Dim parameter As String = "MySource1"" ""MyLogFile1"
        Context.Parameters("assemblypath") = """" + Context.Parameters("assemblypath") + """ """ + parameter + """"
        MyBase.OnBeforeInstall(savedState)
    End Sub
    

    Deze waarde bevat doorgaans het volledige pad naar het uitvoerbare bestand voor de Windows-service. Om de service correct te starten, moet de gebruiker aanhalingstekens opgeven voor het pad en elke afzonderlijke parameter. Een gebruiker kan de parameters in de registervermelding ImagePath wijzigen om de opstartparameters voor de Windows-service te wijzigen. Een betere manier is echter om de waarde programmatisch te wijzigen en de functionaliteit op een gebruiksvriendelijke manier beschikbaar te maken, bijvoorbeeld met behulp van een beheer- of configuratiehulpprogramma.

De service bouwen

  1. Kies in Solution ExplorerEigenschappen in het snelmenu voor het project MyNewService .

    De eigenschappenpagina's voor uw project worden weergegeven.

  2. Kies op het tabblad Toepassing in de lijst Opstartobject de optie MyNewService.Program of Sub Main voor Visual Basic-projecten.

  3. Als u het project wilt bouwen, kiest u in Solution ExplorerDe optie Bouwen in het snelmenu voor uw project (of drukt u op Ctrl+Shift+B).

De service installeren

Nu u de Windows-service hebt gebouwd, kunt u deze installeren. Als u een Windows-service wilt installeren, moet u beschikken over beheerdersreferenties op de computer waarop deze is geïnstalleerd.

  1. Open Opdrachtprompt voor ontwikkelaars voor Visual Studio met beheerdersreferenties.

  2. Navigeer in opdrachtprompt voor ontwikkelaars voor Visual Studio naar de map met de uitvoer van uw project (standaard de submap \bin\Debug van uw project).

  3. Voer de volgende opdracht in:

    installutil MyNewService.exe
    

    Als de service is geïnstalleerd, meldt de opdracht geslaagd.

    Als het systeem installutil.exeniet kan vinden, controleert u of deze bestaat op uw computer. Dit hulpprogramma wordt geïnstalleerd met de .NET Framework in de map %windir%\Microsoft.NET\Framework[64]\<framework-versie>. Het standaardpad voor de 64-bits versie is bijvoorbeeld %windir%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe.

    Als het installutil.exe proces mislukt, controleert u het installatielogboek om erachter te komen waarom. Het logboek bevindt zich standaard in dezelfde map als het uitvoerbare bestand van de service. De installatie kan mislukken als:

    • De RunInstallerAttribute klas is niet aanwezig in de ProjectInstaller klas.
    • Het kenmerk is niet ingesteld op true.
    • De ProjectInstaller klasse is niet gedefinieerd als public.

Zie Instructies: Services installeren en verwijderen voor meer informatie.

De service starten en uitvoeren

  1. Open in Windows de bureaublad-app Services . Druk op Windows+R om het vak Uitvoeren te openen, voer services.msc in en druk vervolgens op Enter of selecteer OK.

    Uw service wordt nu weergegeven in Services, alfabetisch weergegeven met de weergavenaam die u hiervoor hebt ingesteld.

    MyNewService in het venster Services.

  2. Als u de service wilt starten, kiest u Start in het snelmenu van de service.

  3. Als u de service wilt stoppen, kiest u Stoppen in het snelmenu van de service.

  4. (Optioneel) Gebruik vanaf de opdrachtregel de opdrachten net start <service name> en net stop <service name> om uw service te starten en te stoppen.

De uitvoer van het gebeurtenislogboek van uw service controleren

  1. Open in Windows de Logboeken bureaublad-app. Voer Logboeken in de zoekbalk van Windows in en selecteer vervolgens Logboeken in de zoekresultaten.

    Tip

    In Visual Studio kunt u gebeurtenislogboeken openen door Server Explorer te openen vanuit het menu Weergave (of druk op Ctrl+Alt+S) en het knooppunt Gebeurtenislogboeken voor de lokale computer uit te vouwen.

  2. Vouw in LogboekenLogboeken toepassingen en services uit.

  3. Zoek de vermelding voor MyNewLog (of MyLogFile1 als u de procedure voor het toevoegen van opdrachtregelargumenten hebt gevolgd) en vouw deze uit. U ziet nu de vermeldingen voor de twee acties (starten en stoppen) die uw service heeft uitgevoerd.

    Gebruik de Logboeken om de vermeldingen in het gebeurtenislogboek te bekijken

Resources opschonen

Als u de Windows-service-app niet meer nodig hebt, kunt u deze verwijderen.

  1. Open Opdrachtprompt voor ontwikkelaars voor Visual Studio met beheerdersreferenties.

  2. Navigeer in het venster Opdrachtprompt voor ontwikkelaars voor Visual Studio naar de map met de uitvoer van uw project.

  3. Voer de volgende opdracht in:

    installutil.exe /u MyNewService.exe
    

    Als de service is verwijderd, meldt de opdracht dat uw service is verwijderd. Zie Instructies: Services installeren en verwijderen voor meer informatie.

Volgende stappen

Nu u de service hebt gemaakt, kunt u het volgende doen:

  • Maak een zelfstandig installatieprogramma dat anderen kunnen gebruiken om uw Windows-service te installeren. Gebruik de WiX Toolset om een installatieprogramma voor een Windows-service te maken. Zie Een installatiepakket maken voor andere ideeën.

  • Verken het ServiceController onderdeel, waarmee u opdrachten kunt verzenden naar de service die u hebt geïnstalleerd.

  • In plaats van het gebeurtenislogboek te maken wanneer de toepassing wordt uitgevoerd, gebruikt u een installatieprogramma om een gebeurtenislogboek te maken wanneer u de toepassing installeert. Het gebeurtenislogboek wordt verwijderd door het installatieprogramma wanneer u de toepassing verwijdert. Voor meer informatie raadpleegt u EventLogInstaller.

Zie ook