Kurz: Vytvoření aplikace služby pro Windows
Upozornění
Tato dokumentace není určená pro nejnovější verzi služby systému Windows. Nejnovější obsah o službách systému Windows pomocí BackgroundService šablony Služby pracovního procesu najdete tady:
Tento článek ukazuje, jak v sadě Visual Studio vytvořit aplikaci služby pro Windows, která zapisuje zprávy do protokolu událostí.
Vytvoření služby
Začněte vytvořením projektu a nastavením hodnot požadovaných pro správné fungování služby.
V nabídce Soubor sady Visual Studio vyberte Nový>projekt (nebo stiskněte Klávesu Ctrl+Shift+N). Otevře se okno Nový projekt .
Vyhledejte a vyberte šablonu projektu Služba systému Windows (.NET Framework).
Poznámka
Pokud šablonu Služby pro Windows nevidíte, možná budete muset nainstalovat úlohu Vývoj desktopových aplikací .NET pomocí Instalační program pro Visual Studio.
Jako Název zadejte MyNewService a pak vyberte OK.
Zobrazí se karta Návrh (Service1.cs [Návrh] nebo Service1.vb [Návrh]).
Šablona projektu obsahuje třídu komponenty s názvem
Service1
, která dědí z System.ServiceProcess.ServiceBase. Obsahuje většinu základního kódu služby, například kód pro spuštění služby.
Přejmenování služby
Přejmenujte službu z Service1 na MyNewService.
V Průzkumník řešení vyberte Service1.cs nebo Service1.vb a v místní nabídce zvolte Přejmenovat. Přejmenujte soubor na MyNewService.cs nebo MyNewService.vb a stiskněte Enter.
Zobrazí se automaticky otevírané okno s dotazem, jestli chcete přejmenovat všechny odkazy na prvek kódu Service1.
V automaticky otevíraných oknech vyberte Ano.
Na kartě Návrh vyberte v místní nabídce Možnost Vlastnosti . V okně Vlastnosti změňte hodnotu ServiceName na MyNewService.
V nabídce Soubor vyberte Uložit vše.
Přidání funkcí do služby
V této části přidáte do služby windows vlastní protokol událostí. Komponenta EventLog je příkladem typu komponenty, kterou můžete přidat do služby systému Windows.
Přidání funkce vlastního protokolu událostí
V Průzkumník řešení v místní nabídce souboru MyNewService.cs nebo MyNewService.vb zvolte Zobrazit Designer.
V panelu nástrojů rozbalte Komponenty a přetáhněte komponentu EventLog na kartu Service1.cs [Návrh] nebo Service1.vb [Návrh].
V Průzkumník řešení v místní nabídce souboru MyNewService.cs nebo MyNewService.vb zvolte Zobrazit kód.
Definujte vlastní protokol událostí.
V jazyce C# upravte existující
MyNewService()
konstruktor, jak je znázorněno v následujícím fragmentu kódu. Pro Visual Basic přidejteNew()
konstruktor, jak je znázorněno v následujícím fragmentu kódu.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
using
Přidejte příkaz do souboru MyNewService.cs (pokud ještě neexistuje) neboImports
příkaz do souboru MyNewService.vb pro System.Diagnostics obor názvů:using System.Diagnostics;
Imports System.Diagnostics
V nabídce Soubor vyberte Uložit vše.
Definovat, co se stane při spuštění služby
V editoru kódu pro Soubor MyNewService.cs nebo MyNewService.vb vyhledejte metodu OnStart . Visual Studio při vytváření projektu automaticky vytvořilo prázdnou definici metody. Přidejte kód, který při spuštění služby zapíše položku do protokolu událostí:
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
Cyklické dotazování
Vzhledem k tomu, že aplikace služby je navržená tak, aby byla dlouhotrvající, obvykle se dotazuje nebo monitoruje systém, který jste nastavili v OnStart metodě . Po zahájení operace služby se OnStart
tato metoda musí vrátit do operačního systému, aby systém nebyl zablokovaný.
Pokud chcete nastavit jednoduchý mechanismus dotazování, použijte komponentu System.Timers.Timer . Časovač vyvolá Elapsed událost v pravidelných intervalech, kdy služba může provádět monitorování. Komponentu Timer použijete takto:
- Nastavte vlastnosti Timer komponenty v
MyNewService.OnStart
metodě . - Spusťte časovač voláním Start metody .
Nastavení mechanismu dotazování
using
Přidejte příkaz do souboru MyNewService.cs neboImports
příkaz do souboru MyNewService.vb pro System.Timers obor názvů:using System.Timers;
Imports System.Timers
Do události přidejte následující kód pro
MyNewService.OnStart
nastavení mechanismu dotazování:// 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()
MyNewService
Do třídy přidejte členovou proměnnou. Obsahuje identifikátor další události, která se zapíše do protokolu událostí:private int eventId = 1;
Private eventId As Integer = 1
Do
MyNewService
třídy přidejte metoduOnTimer
pro zpracování Timer.Elapsed události: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
Místo spouštění veškeré práce v hlavním vlákně můžete úlohy spouštět pomocí pracovních vláken na pozadí. Další informace naleznete v tématu System.ComponentModel.BackgroundWorker.
Definujte, co se stane při zastavení služby.
Vložte do OnStop metody řádek kódu, který při zastavení služby přidá položku do protokolu událostí:
protected override void OnStop()
{
eventLog1.WriteEntry("In OnStop.");
}
Protected Overrides Sub OnStop()
EventLog1.WriteEntry("In OnStop.")
End Sub
Definování dalších akcí pro službu
Můžete přepsat OnPausemetody , OnContinuea OnShutdown a definovat další zpracování pro vaši komponentu.
Následující kód ukazuje, jak můžete přepsat metodu OnContinue ve MyNewService
třídě :
protected override void OnContinue()
{
eventLog1.WriteEntry("In OnContinue.");
}
Protected Overrides Sub OnContinue()
EventLog1.WriteEntry("In OnContinue.")
End Sub
Nastavení stavu služby
Služby hlásí svůj stav správci řízení služeb , aby uživatel mohl zjistit, zda služba funguje správně. Ve výchozím nastavení služba dědí z ServiceBase hlásí omezenou sadu nastavení stavu, mezi které patří SERVICE_STOPPED, SERVICE_PAUSED a SERVICE_RUNNING. Pokud spuštění služby nějakou dobu trvá, je vhodné nahlásit stav SERVICE_START_PENDING.
Nastavení stavu SERVICE_START_PENDING a SERVICE_STOP_PENDING můžete implementovat přidáním kódu, který volá funkci Windows SetServiceStatus .
Implementace stavu čekání na vyřízení služby
using
Přidejte příkaz do souboru MyNewService.cs neboImports
příkaz do souboru MyNewService.vb pro System.Runtime.InteropServices obor názvů:using System.Runtime.InteropServices;
Imports System.Runtime.InteropServices
Do souboru MyNewService.cs nebo MyNewService.vb přidejte následující kód, který deklaruje
ServiceState
hodnoty a přidá strukturu stavu, kterou použijete ve volání volání volání platformy: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
Poznámka
Správce řízení služeb používá
dwWaitHint
členy adwCheckpoint
SERVICE_STATUS struktury k určení, kolik času má čekat na spuštění nebo vypnutí služby systému Windows. Pokud vašeOnStart
metody aOnStop
běží dlouho, může služba požádat o více času opětovným volánímSetServiceStatus
s vyššídwCheckPoint
hodnotou.MyNewService
Ve třídě deklarujte funkci SetServiceStatus pomocí volání platformy:[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
Pokud chcete implementovat stav SERVICE_START_PENDING, přidejte na začátek OnStart metody následující kód:
// 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)
Na konec
OnStart
metody přidejte kód, který nastaví stav na 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)
(Volitelné) Pokud OnStop je metoda dlouhotrvající, opakujte tento postup v
OnStop
metodě . Implementujte stav SERVICE_STOP_PENDING a vraťte stav SERVICE_STOPPED před ukončenímOnStop
metody.Příklad:
// 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)
Přidání instalačních programů do služby
Před spuštěním služby systému Windows ji musíte nainstalovat, což ji zaregistruje ve Správci řízení služeb. Přidejte do projektu instalační programy pro zpracování podrobností registrace.
V Průzkumník řešení v místní nabídce souboru MyNewService.cs nebo MyNewService.vb zvolte Zobrazit Designer.
V návrhovém zobrazení vyberte oblast pozadí a pak v místní nabídce zvolte Přidat instalační program .
Sada Visual Studio ve výchozím nastavení přidá do projektu třídu komponenty s názvem
ProjectInstaller
, která obsahuje dva instalační programy. Tyto instalační programy jsou určené pro vaši službu a pro proces přidružený ke službě.V návrhovém zobrazení pro ProjectInstaller vyberte serviceInstaller1 pro projekt Visual C# nebo ServiceInstaller1 pro projekt Jazyka Visual Basic a pak v místní nabídce zvolte Vlastnosti .
V okně Vlastnosti ověřte, že je vlastnost nastavená ServiceName na MyNewService.
Přidejte do Description vlastnosti text, například Ukázková služba.
Tento text se zobrazí ve sloupci Popis okna Služby a popisuje službu uživateli.
Přidejte text do DisplayName vlastnosti . Například Zobrazovaný název myNewService.
Tento text se zobrazí ve sloupci Zobrazovaný název v okně Služby . Tento název se může lišit od ServiceName vlastnosti, což je název, který systém používá (například název, který používáte pro
net start
příkaz ke spuštění služby).V rozevíracím StartType seznamu nastavte vlastnost na Automatic hodnotu .
Po dokončení by okna Vlastnosti měla vypadat jako na následujícím obrázku:
V návrhovém zobrazení pro ProjectInstaller zvolte serviceProcessInstaller1 pro projekt Visual C# nebo ServiceProcessInstaller1 pro projekt Jazyka Visual Basic a pak v místní nabídce zvolte Vlastnosti . V rozevíracím Account seznamu nastavte vlastnost na LocalSystem hodnotu .
Toto nastavení nainstaluje službu a spustí ji pomocí místního systémového účtu.
Důležité
Účet LocalSystem má široká oprávnění, včetně možnosti zápisu do protokolu událostí. Používejte tento účet opatrně, protože může zvýšit riziko napadení škodlivým softwarem. U jiných úloh zvažte použití LocalService účtu, který funguje jako neprivilegovaný uživatel na místním počítači a prezentuje anonymní přihlašovací údaje libovolnému vzdálenému serveru. Tento příklad selže, pokud se pokusíte použít LocalService účet, protože potřebuje oprávnění k zápisu do protokolu událostí.
Další informace o instalačních službách najdete v tématu Postupy: Přidání instalačních programů do aplikace služby.
(Volitelné) Nastavení parametrů spouštění
Poznámka
Než se rozhodnete přidat spouštěcí parametry, zvažte, jestli je to nejlepší způsob předávání informací do vaší služby. I když se snadno používají a parsují a uživatel je může snadno přepsat, může být pro uživatele obtížnější je najít a používat bez dokumentace. Obecně platí, že pokud vaše služba vyžaduje více než jen několik parametrů spuštění, měli byste místo toho použít registr nebo konfigurační soubor.
Služba systému Windows může přijímat argumenty příkazového řádku nebo spouštěcí parametry. Když přidáte kód pro zpracování parametrů spuštění, může uživatel spustit službu s vlastními parametry spuštění v okně vlastností služby. Tyto spouštěcí parametry se však při příštím spuštění služby neuchovávají. Pokud chcete parametry spouštění nastavit trvale, nastavte je v registru.
Každá služba systému Windows má v podklíči HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services položku registru. Pod podklíčem každé služby použijte podklíč Parameters k ukládání informací, ke kterým má vaše služba přístup. Konfigurační soubory aplikace můžete pro službu Systému Windows používat stejně jako u jiných typů programů. Ukázkový kód najdete v tématu ConfigurationManager.AppSettings.
Přidání spouštěcích parametrů
Vyberte Soubor Program.cs nebo MyNewService.Designer. vb a pak v místní nabídce zvolte Zobrazit kód.
Main
V metodě změňte kód tak, aby přidal vstupní parametr a předal ho konstruktoru služby: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
V souboru MyNewService.cs nebo MyNewService.vb změňte
MyNewService
konstruktor tak, aby zpracovával vstupní parametr následujícím způsobem: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
Tento kód nastaví zdroj událostí a název protokolu podle spouštěcích parametrů, které uživatel zadá. Pokud nejsou zadány žádné argumenty, použije se výchozí hodnoty.
Chcete-li zadat argumenty příkazového řádku, přidejte následující kód do
ProjectInstaller
třídy v souboru ProjectInstaller.cs nebo 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
Tato hodnota obvykle obsahuje úplnou cestu ke spustitelnému souboru pro službu systému Windows. Aby se služba spustila správně, musí uživatel zadat uvozovky pro cestu a každý jednotlivý parametr. Uživatel může změnit parametry v položce registru ImagePath a změnit parametry spuštění služby systému Windows. Lepším způsobem je ale hodnotu změnit programově a zpřístupnit funkci uživatelsky přívětivým způsobem, například pomocí nástroje pro správu nebo konfiguraci.
Sestavení služby
V Průzkumník řešení zvolte v místní nabídce projektu MyNewServicemožnost Vlastnosti.
Zobrazí se stránky vlastností projektu.
Na kartě Aplikace v seznamu Spouštěcí objekt zvolte MyNewService.Program nebo Sub Main pro projekty Jazyka Visual Basic.
Projekt sestavíte tak, že v Průzkumník řešení zvolíte z místní nabídky projektu Možnost Sestavit (nebo stiskněte klávesu Ctrl+Shift+B).
Instalace služby
Teď, když jste vytvořili službu pro Windows, ji můžete nainstalovat. Pokud chcete nainstalovat službu systému Windows, musíte mít na počítači, na kterém je nainstalovaná, přihlašovací údaje správce.
Otevřete Příkazový řádek pro vývojáře pro Visual Studio s přihlašovacími údaji správce.
V okně Developer Command Prompt pro Visual Studio přejděte do složky, která obsahuje výstup projektu (ve výchozím nastavení je to podadresář projektu \bin\Debug ).
Zadejte následující příkaz:
installutil MyNewService.exe
Pokud se služba úspěšně nainstaluje, příkaz oznámí úspěch.
Pokud systém nemůže najít installutil.exe, ujistěte se, že na počítači existuje. Tento nástroj je nainstalován spolu s rozhraním .NET Framework do složky %windir%\Microsoft.NET\Framework[64]\<verze rozhraní>. Například výchozí cesta pro 64bitovou verzi je %windir%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe.
Pokud procesinstallutil.exe selže, zkontrolujte instalační protokol a zjistěte důvod. Ve výchozím nastavení je protokol ve stejné složce jako spustitelný soubor služby. Instalace může selhat v následujících případech:
- Třída RunInstallerAttribute se ve třídě nenachází
ProjectInstaller
. - Atribut není nastavený na
true
hodnotu . - Třída
ProjectInstaller
není definována jakopublic
.
- Třída RunInstallerAttribute se ve třídě nenachází
Další informace najdete v tématu Postupy: Instalace a odinstalace služeb.
Spuštění a spuštění služby
Ve Windows otevřete desktopovou aplikaci Služby . Stisknutím klávesy Windows+R otevřete okno Spustit , zadejte services.msc a pak stiskněte Klávesu Enter nebo vyberte OK.
Vaše služba by měla být uvedená v seznamu Služby a zobrazovaná abecedně podle zobrazovaného názvu, který jste pro ni nastavili.
Službu spustíte tak, že v místní nabídce služby zvolíte Start .
Službu zastavíte tak, že v místní nabídce služby zvolíte Zastavit .
(Volitelné) Na příkazovém řádku spusťte a zastavte službu pomocí příkazů net start <service name> a net stop <service name> .
Ověření výstupu protokolu událostí vaší služby
Ve Windows otevřete desktopovou aplikaci Prohlížeč událostí. Na panelu hledání ve Windows zadejte Prohlížeč událostí a ve výsledcích hledání vyberte Prohlížeč událostí.
Tip
V sadě Visual Studio můžete získat přístup k protokolům událostí tak, že otevřete Průzkumníka serveru z nabídky Zobrazení (nebo stisknete klávesu Ctrl+Alt+S) a rozbalíte uzel Protokoly událostí pro místní počítač.
V Prohlížeč událostí rozbalte Protokoly aplikací a služeb.
Vyhledejte výpis pro MyNewLog (nebo MyLogFile1 , pokud jste postupovali podle postupu přidání argumentů příkazového řádku) a rozbalte ho. Měly by se zobrazit položky pro dvě akce (spuštění a zastavení), které služba provedla.
Vyčištění prostředků
Pokud už aplikaci Služby pro Windows nepotřebujete, můžete ji odebrat.
Otevřete Příkazový řádek pro vývojáře pro Visual Studio s přihlašovacími údaji správce.
V okně Developer Command Prompt for Visual Studio přejděte do složky, která obsahuje výstup vašeho projektu.
Zadejte následující příkaz:
installutil.exe /u MyNewService.exe
Pokud se služba úspěšně odinstaluje, příkaz ohlásí, že se služba úspěšně odebrala. Další informace najdete v tématu Postupy: Instalace a odinstalace služeb.
Další kroky
Teď, když jste službu vytvořili, můžete:
Vytvořte samostatný instalační program, který budou ostatní používat k instalaci služby systému Windows. K vytvoření instalačního programu pro službu systému Windows použijte sadu nástrojů WiX Toolset . Další informace najdete v tématu Vytvoření instalačního balíčku.
Prozkoumejte komponentu ServiceController , která umožňuje odesílat příkazy do služby, kterou jste nainstalovali.
Místo vytváření protokolu událostí při spuštění aplikace použijte instalační program k vytvoření protokolu událostí při instalaci aplikace. Instalační program odstraní protokol událostí při odinstalaci aplikace. Další informace naleznete v tématu EventLogInstaller.