Oktatóanyag: Windows-szolgáltatásalkalmazás létrehozása
Figyelmeztetés
Ez a dokumentáció nem a Windows Szolgáltatás legújabb verziójához készült. A Windows Services legújabb, a munkavégző szolgáltatás sablont használó BackgroundService tartalmaiért lásd:
Ez a cikk bemutatja, hogyan hozhat létre windowsos szolgáltatásalkalmazást a Visual Studióban, amely üzeneteket ír egy eseménynaplóba.
Szolgáltatás létrehozása
Először hozza létre a projektet, és állítsa be a szolgáltatás megfelelő működéséhez szükséges értékeket.
A Visual Studio Fájl menüjében válassza az Új>projekt lehetőséget (vagy nyomja le aCtrl Shift+Nbillentyűkombinációt+) az Új projekt ablak megnyitásához.
Keresse meg és válassza ki a Windows Szolgáltatás (.NET-keretrendszer) projektsablont.
Megjegyzés
Ha nem látja a Windows Szolgáltatás sablont, előfordulhat, hogy telepítenie kell a .NET asztali fejlesztési számítási feladatát a Visual Studio Installer használatával.
A Név mezőbe írja be a MyNewService kifejezést, majd válassza az OK gombot.
Megjelenik a Tervezés lap (Service1.cs [Tervezés] vagy Service1.vb [Tervezés]).
A projektsablon tartalmaz egy nevű
Service1
összetevőosztályt, amely a következőtől System.ServiceProcess.ServiceBaseöröklődik: . Az alapszintű szolgáltatáskód nagy részét tartalmazza, például a szolgáltatás indítására vonatkozó kódot.
A szolgáltatás átnevezése
Nevezze át a szolgáltatást Service1-rőlMyNewService névre.
A Megoldáskezelőben válassza a Service1.cs vagy a Service1.vb elemet, majd válassza az Átnevezés lehetőséget a helyi menüből. Nevezze át a fájlt MyNewService.cs vagy MyNewService.vb névre, majd nyomja le az Enter billentyűt
Megjelenik egy előugró ablak, amely megkérdezi, hogy szeretné-e átnevezni a Service1 kódelemre mutató összes hivatkozást.
Az előugró ablakban válassza az Igen lehetőséget.
A Tervezés lapon válassza a Helyi menü Tulajdonságok elemét . A Tulajdonságok ablakban módosítsa a ServiceName értéket MyNewService értékre.
Válassza az Összes mentése lehetőséget a Fájl menüben.
Szolgáltatások hozzáadása a szolgáltatáshoz
Ebben a szakaszban egy egyéni eseménynaplót ad hozzá a Windows szolgáltatáshoz. Az EventLog összetevő egy példa arra, hogy milyen típusú összetevőt adhat hozzá egy Windows-szolgáltatáshoz.
Egyéni eseménynapló-funkciók hozzáadása
A Megoldáskezelőben a MyNewService.cs vagy a MyNewService.vb helyi menüjében válassza a Nézet Tervező lehetőséget.
Az Eszközkészletbenbontsa ki az Összetevők elemet, majd húzza az EventLog összetevőt a Service1.cs [Tervezés] vagy a Service1.vb [Tervezés] lapra.
A Megoldáskezelőben a MyNewService.cs vagy a MyNewService.vb helyi menüjében válassza a Kód megtekintése lehetőséget.
Egyéni eseménynapló definiálása.
C# esetén szerkessze a meglévő
MyNewService()
konstruktort az alábbi kódrészletben látható módon. Visual Basic esetén adja hozzá aNew()
konstruktort az alábbi kódrészletben látható módon.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
Adjon hozzá egy utasítást
using
a MyNewService.cs fájlhoz (ha még nem létezik), vagy egy utasítástImports
a MyNewService.vb fájlba a System.Diagnostics névtérhez:using System.Diagnostics;
Imports System.Diagnostics
Válassza az Összes mentése lehetőséget a Fájl menüben.
Annak meghatározása, hogy mi történik a szolgáltatás indításakor
Keresse meg a metódust a MyNewService.cs vagy aOnStart MyNewService.vb kódszerkesztőjében. A Visual Studio automatikusan létrehozott egy üres metódusdefiníciót a projekt létrehozásakor. Adjon hozzá egy kódot, amely bejegyzést ír az eseménynaplóba a szolgáltatás indításakor:
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
Ciklikus lekérdezés
Mivel egy szolgáltatásalkalmazás hosszú ideig futó, általában lekérdezi vagy figyeli a metódusban OnStart beállított rendszert. A OnStart
metódusnak vissza kell térnie az operációs rendszerhez a szolgáltatás működésének megkezdése után, hogy a rendszer ne legyen blokkolva.
Egyszerű lekérdezési mechanizmus beállításához használja az összetevőt System.Timers.Timer . Az időzítő rendszeres időközönként előhoz egy Elapsed eseményt, amely során a szolgáltatás elvégezheti annak monitorozását. Az összetevőt az Timer alábbiak szerint használhatja:
- Adja meg az Timer összetevő tulajdonságait a
MyNewService.OnStart
metódusban. - Indítsa el az időzítőt a Start metódus meghívásával.
A lekérdezési mechanizmus beállítása
Adjon hozzá egy utasítást
using
a MyNewService.cs fájlhoz vagy egy utasítástImports
a MyNewService.vb fájlhoz a System.Timers névtérhez:using System.Timers;
Imports System.Timers
Adja hozzá a következő kódot az
MyNewService.OnStart
eseményhez a lekérdezési mechanizmus beállításához:// 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()
Az osztályban
MyNewService
adjon hozzá egy tagváltozót. A következő esemény azonosítóját tartalmazza, amely az eseménynaplóba írható:private int eventId = 1;
Private eventId As Integer = 1
A osztályban
MyNewService
adja hozzá azOnTimer
esemény kezelésére használt metódust Timer.Elapsed :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
Ahelyett, hogy az összes munkáját a fő szálon futtatja, háttérmunkaláncok használatával is futtathat feladatokat. További információ: System.ComponentModel.BackgroundWorker.
Annak meghatározása, hogy mi történik a szolgáltatás leállításakor
Szúrjon be egy kódsort a OnStop metódusba, amely a szolgáltatás leállításakor hozzáad egy bejegyzést az eseménynaplóhoz:
protected override void OnStop()
{
eventLog1.WriteEntry("In OnStop.");
}
Protected Overrides Sub OnStop()
EventLog1.WriteEntry("In OnStop.")
End Sub
A szolgáltatás egyéb műveleteinek definiálása
Felülbírálhatja a OnPause, OnContinueés OnShutdown metódusokat, hogy további feldolgozást definiáljon az összetevőhöz.
Az alábbi kód bemutatja, hogyan bírálhatja felül a metódust OnContinue az MyNewService
osztályban:
protected override void OnContinue()
{
eventLog1.WriteEntry("In OnContinue.");
}
Protected Overrides Sub OnContinue()
EventLog1.WriteEntry("In OnContinue.")
End Sub
Szolgáltatás állapotának beállítása
A szolgáltatások jelentik az állapotukat a Service Control Managernek , hogy a felhasználó megállapíthassa, hogy egy szolgáltatás megfelelően működik-e. Alapértelmezés szerint egy olyan szolgáltatás, amely a jelentésekből ServiceBase örökli az állapotbeállítások korlátozott készletét, beleértve a SERVICE_STOPPED, a SERVICE_PAUSED és a SERVICE_RUNNING. Ha egy szolgáltatás indítása eltarthat egy ideig, érdemes SERVICE_START_PENDING állapotot jelenteni.
A SERVICE_START_PENDING és SERVICE_STOP_PENDING állapotbeállításokat a Windows SetServiceStatus függvényt meghívó kód hozzáadásával implementálhatja.
Függőben lévő szolgáltatás állapotának implementálása
Adjon hozzá egy utasítást
using
a MyNewService.cs fájlhoz vagy egy utasítástImports
a MyNewService.vb fájlhoz a System.Runtime.InteropServices névtérhez:using System.Runtime.InteropServices;
Imports System.Runtime.InteropServices
Adja hozzá a következő kódot a MyNewService.cs vagy a MyNewService.vb fájlhoz az
ServiceState
értékek deklarálásához és az állapot struktúrájának hozzáadásához, amelyet platformhívási hívásban fog használni: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
Megjegyzés
A Service Control Manager a
dwWaitHint
SERVICE_STATUS struktúrájának ésdwCheckpoint
tagjainak használatával határozza meg, hogy mennyi időt kell várnia egy Windows-szolgáltatás elindítására vagy leállítására. Ha a ésOnStop
aOnStart
metódusok hosszú ideig futnak, a szolgáltatás több időt kérhet, ha egy növekményesdwCheckPoint
értékkel újra meghívjaSetServiceStatus
.A osztályban
MyNewService
deklarálja a SetServiceStatus függvényt platformhívás használatával:[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
A SERVICE_START_PENDING állapotának implementálásához adja hozzá a következő kódot a OnStart metódus elejéhez:
// 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)
Adjon hozzá kódot a
OnStart
metódus végéhez, és állítsa az állapotot 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)
(Nem kötelező) Ha OnStop hosszú ideig futó metódus, ismételje meg ezt az eljárást a
OnStop
metódusban. Implementálja a SERVICE_STOP_PENDING állapotot, és adja vissza a SERVICE_STOPPED állapotot, mielőtt aOnStop
metódus kilép.Például:
// 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)
Telepítők hozzáadása a szolgáltatáshoz
Windows-szolgáltatás futtatása előtt telepítenie kell azt, amely regisztrálja azt a Service Control Managerrel. Adja hozzá a telepítőket a projekthez a regisztrációs adatok kezeléséhez.
A Megoldáskezelőben a MyNewService.cs vagy a MyNewService.vb helyi menüjében válassza a Nézet Tervező lehetőséget.
Tervező nézetben válassza ki a háttérterületet, majd a helyi menüBen válassza a Telepítő hozzáadása lehetőséget.
A Visual Studio alapértelmezés szerint hozzáad egy nevű összetevőosztályt
ProjectInstaller
, amely két telepítőt tartalmaz a projekthez. Ezek a telepítők az Ön szolgáltatásához és a szolgáltatáshoz társított folyamathoz tartoznak.A ProjectInstallerTervező nézetében válassza a serviceInstaller1 elemet egy Visual C#-projekthez, vagy a ServiceInstaller1 elemet egy Visual Basic-projekthez, majd válassza a helyi menü Tulajdonságok elemét.
A Tulajdonságok ablakban ellenőrizze, hogy a ServiceName tulajdonság MyNewService értékre van-e állítva.
Adjon hozzá szöveget a Description tulajdonsághoz, például az A mintaszolgáltatáshoz.
Ez a szöveg a Szolgáltatások ablak Leírás oszlopában jelenik meg, és leírja a szolgáltatást a felhasználónak.
Szöveg hozzáadása a DisplayName tulajdonsághoz. Például a MyNewService megjelenítendő neve.
Ez a szöveg a Szolgáltatások ablak Megjelenítendő neve oszlopában jelenik meg. Ez a név eltérhet a ServiceName tulajdonságtól, amely a rendszer által használt név (például a szolgáltatás elindításához használt
net start
név).Állítsa be a StartType tulajdonságot Automatic a legördülő listából.
Ha végzett, a Tulajdonságok ablaknak a következő ábrához hasonlóan kell kinéznie:
A ProjectInstallerTervező nézetében válassza a serviceProcessInstaller1 elemet egy Visual C#-projekthez, vagy a ServiceProcessInstaller1 elemet egy Visual Basic-projekthez, majd válassza a helyi menü Tulajdonságok elemét. Állítsa be a Account tulajdonságot LocalSystem a legördülő listából.
Ez a beállítás telepíti a szolgáltatást, és a helyi rendszerfiók használatával futtatja.
Fontos
A LocalSystem fiók széles körű engedélyekkel rendelkezik, beleértve az eseménynaplóba való írás lehetőségét is. Óvatosan használja ezt a fiókot, mert növelheti a kártékony szoftverek támadásainak kockázatát. Egyéb feladatok esetén fontolja meg a LocalService fiók használatát, amely nem kiemelt felhasználóként működik a helyi számítógépen, és névtelen hitelesítő adatokat jelenít meg bármely távoli kiszolgálónak. Ez a példa meghiúsul, ha megpróbálja használni a LocalService fiókot, mert engedélyre van szüksége az eseménynaplóba való íráshoz.
A telepítőkkel kapcsolatos további információkért lásd : Telepítők hozzáadása a szolgáltatásalkalmazáshoz.
(Nem kötelező) Indítási paraméterek beállítása
Megjegyzés
Mielőtt úgy dönt, hogy indítási paramétereket ad hozzá, fontolja meg, hogy ez-e a legjobb módja az információk szolgáltatásnak való átadásának. Bár könnyen használhatók és elemezhetők, és a felhasználók könnyen felülbírálhatják őket, előfordulhat, hogy a felhasználó nehezebben derítheti fel és használhatja őket dokumentáció nélkül. Általában, ha a szolgáltatáshoz több indítási paraméterre van szükség, inkább a beállításjegyzéket vagy egy konfigurációs fájlt kell használnia.
A Windows-szolgáltatások elfogadhatnak parancssori argumentumokat vagy indítási paramétereket. Amikor kódot ad hozzá az indítási paraméterek feldolgozásához, a felhasználó saját egyéni indítási paraméterekkel indíthatja el a szolgáltatást a szolgáltatás tulajdonságainak ablakában. Ezek az indítási paraméterek azonban nem maradnak meg a szolgáltatás következő indításakor. Az indítási paraméterek végleges beállításához állítsa be őket a beállításjegyzékben.
Minden Windows-szolgáltatás rendelkezik egy beállításjegyzék-bejegyzéssel a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services alkulcs alatt. Az egyes szolgáltatások alkulcsában a Paraméterek alkulcs használatával tárolhatja a szolgáltatás által elérhető információkat. A Windows-szolgáltatások alkalmazáskonfigurációs fájljai ugyanúgy használhatók, mint más típusú programok esetében. A mintakódért lásd: ConfigurationManager.AppSettings.
Indítási paraméterek hozzáadása
Válassza a Program.cs vagy a MyNewService.Tervező lehetőséget. vb, majd a helyi menüben válassza a Kód megtekintése lehetőséget. A metódusban módosítsa a
Main
kódot úgy, hogy adjon hozzá egy bemeneti paramétert, és adja át a szolgáltatáskonstruktornak: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
A MyNewService.cs vagy a MyNewService.vb fájlban módosítsa a
MyNewService
konstruktort a bemeneti paraméter feldolgozására az alábbiak szerint: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
Ez a kód a felhasználó által megadott indítási paramétereknek megfelelően állítja be az eseményforrást és a naplónevet. Ha nem ad meg argumentumokat, az alapértelmezett értékeket használja.
A parancssori argumentumok megadásához adja hozzá a következő kódot a ProjectInstaller.cs vagy a
ProjectInstaller
ProjectInstaller.vb osztályhoz: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
Ez az érték általában a Windows szolgáltatás végrehajtható fájljának teljes elérési útját tartalmazza. Ahhoz, hogy a szolgáltatás megfelelően elinduljon, a felhasználónak idézőjeleket kell megadnia az elérési úthoz és az egyes paraméterekhez. A felhasználók módosíthatják az ImagePath beállításjegyzék-bejegyzés paramétereit a Windows-szolgáltatás indítási paramétereinek módosításához. A jobb módszer azonban az érték programozott módosítása és a funkciók felhasználóbarát módon történő elérhetővé tétele, például felügyeleti vagy konfigurációs segédprogram használatával.
A szolgáltatás létrehozása
A Megoldáskezelőben válassza a Tulajdonságok lehetőséget a MyNewService projekt helyi menüjében.
Megjelennek a projekt tulajdonságlapjai.
Az Alkalmazás lap Indítási objektum listájában válassza a MyNewService.Program vagy a Visual Basic-projektek alhálózata lehetőséget.
A projekt létrehozásához a Megoldáskezelőben válassza a Build lehetőséget a projekt helyi menüjében (vagy nyomja le a Ctrl ShiftBbillentyűkombinációt++).
A szolgáltatás telepítése
Most, hogy elkészítette a Windows szolgáltatást, telepítheti. Windows-szolgáltatás telepítéséhez rendszergazdai hitelesítő adatokkal kell rendelkeznie azon a számítógépen, amelyen telepítve van.
Nyissa meg a Visual Studio fejlesztői parancssorát rendszergazdai hitelesítő adatokkal.
A Visual Studio fejlesztői parancssorában keresse meg a projekt kimenetét tartalmazó mappát (alapértelmezés szerint a projekt \bin\Debug alkönyvtárát).
Írja be a következő parancsot:
installutil MyNewService.exe
Ha a szolgáltatás telepítése sikeres, a parancs sikeresnek számít.
Ha a rendszer nem találja ainstallutil.exe, győződjön meg arról, hogy létezik a számítógépen. Ez az eszköz a %windir%\Microsoft.NET\Framework[64]\<framework verzió> mappába .NET-keretrendszer van telepítve. A 64 bites verzió alapértelmezett elérési útja például %windir%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe.
Ha a installutil.exe folyamat meghiúsul, a telepítési naplóból megtudhatja, hogy miért. Alapértelmezés szerint a napló ugyanabban a mappában van, mint a szolgáltatás végrehajtható. A telepítés meghiúsulhat, ha:
- Az RunInstallerAttribute osztály nincs jelen az
ProjectInstaller
osztályban. - Az attribútum nincs beállítva .
true
- Az
ProjectInstaller
osztály nincs definiálva a következőként:public
.
- Az RunInstallerAttribute osztály nincs jelen az
További információ : Szolgáltatások telepítése és eltávolítása.
A szolgáltatás elindítása és futtatása
A Windowsban nyissa meg az asztali Szolgáltatások alkalmazást. A Windows+R billentyű lenyomásával nyissa meg a Futtatás mezőt, írja be a services.msc kifejezést, majd nyomja le az Enter billentyűt , vagy válassza az OK gombot.
A szolgáltatásnak a Szolgáltatások listában kell megjelennie, betűrendben a hozzá beállított megjelenítendő név alapján.
A szolgáltatás elindításához válassza a Start lehetőséget a szolgáltatás helyi menüjében.
A szolgáltatás leállításához válassza a Leállítás lehetőséget a szolgáltatás helyi menüjében.
(Nem kötelező) A parancssorból a net start <szolgáltatásnév> és a net stop <szolgáltatásnév> parancsokkal indítsa el és állítsa le a szolgáltatást.
A szolgáltatás eseménynapló-kimenetének ellenőrzése
Windows rendszerben nyissa meg az asztali Eseménynapló alkalmazást. Írja be a Eseménynapló a Windows keresősávjára, majd válassza Eseménynapló a keresési eredmények közül.
Tipp
A Visual Studióban az eseménynaplók eléréséhez nyissa meg a Kiszolgálókezelőt a Nézet menüből (vagy nyomja le a CtrlAlt+Sbillentyűkombinációt+), és bontsa ki a helyi számítógép Eseménynaplók csomópontját.
A Eseménynapló bontsa ki az Alkalmazások és szolgáltatások naplói elemet.
Keresse meg a MyNewLog (vagy MyLogFile1 ) listáját, ha követte a parancssori argumentumok hozzáadására vonatkozó eljárást, és bontsa ki. Látnia kell a szolgáltatás által végrehajtott két művelet (indítás és leállítás) bejegyzéseit.
Az erőforrások eltávolítása
Ha már nincs szüksége a Windows szolgáltatásalkalmazásra, eltávolíthatja.
Nyissa meg a Visual Studio fejlesztői parancssorát rendszergazdai hitelesítő adatokkal.
A Visual Studio fejlesztői parancssorában keresse meg a projekt kimenetét tartalmazó mappát.
Írja be a következő parancsot:
installutil.exe /u MyNewService.exe
Ha a szolgáltatás sikeresen eltávolítja a szolgáltatást, a parancs azt jelenti, hogy a szolgáltatás sikeresen el lett távolítva. További információ : Szolgáltatások telepítése és eltávolítása.
Következő lépések
Most, hogy létrehozta a szolgáltatást, a következőt teheti:
Hozzon létre egy különálló telepítőprogramot másoknak a Windows-szolgáltatás telepítéséhez. A WiX Toolset használatával hozzon létre egy telepítőt egy Windows-szolgáltatáshoz. További ötletekért lásd: Telepítőcsomag létrehozása.
Ismerkedjen meg az ServiceController összetevővel, amellyel parancsokat küldhet a telepített szolgáltatásnak.
Az alkalmazás futtatásakor az eseménynapló létrehozása helyett hozzon létre egy eseménynaplót egy telepítő használatával az alkalmazás telepítésekor. Az alkalmazás eltávolításakor a telepítő törli az eseménynaplót. További információ: EventLogInstaller.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: