C# Windows Dienst bei Systemstart Herunterfahren/Neustarten



  • Hallo an alle,

    wir haben ein kleines Projekt entwickelt mit folgenden Anforderungen:

    Ein Windows Dienst soll beim Start von Windows, aber schon vor der Benutzeranmeldung laufen. Der Dienst hört auf einem Netzwerkport und wartet entweder auf einen "Shutdown" oder einen "Restart" Befehl. Der Dienst soll auch noch weiterlaufen wenn der Benutzer angemeldet ist.

    Hier sieht man wie der Dienst installiert wird:

    using System;
    using System.ComponentModel;
    using System.Configuration.Install;
    using System.ServiceProcess;
    
    namespace WakeOnInternetService
    {
        [RunInstaller(true)]
        public class WakeOnInternetServiceInstaller : Installer
        {
            /// <summary>
            /// Public Constructor for WindowsServiceInstaller.
            /// - Put all of your Initialization code here.
            /// </summary>
            public WakeOnInternetServiceInstaller()
            {
                ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
                ServiceInstaller serviceInstaller = new ServiceInstaller();
    
                //# Service Account Information
                serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
                serviceProcessInstaller.Username = null;
                serviceProcessInstaller.Password = null;
    
                //# Service Information
                serviceInstaller.DisplayName = "WakeOnInternetClientService";
                serviceInstaller.StartType = ServiceStartMode.Automatic;
                serviceInstaller.Description = "Waits for wake messages";
    
                // This must be identical to the WindowsService.ServiceBase name
                // set in the constructor of WindowsService.cs
                serviceInstaller.ServiceName = "WakeOnInternetClientService";
    
                this.Installers.Add(serviceProcessInstaller);
                this.Installers.Add(serviceInstaller);
    
                serviceInstaller.AfterInstall += ServiceInstaller_AfterInstall; 
            }
    
            private void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
            {
                ServiceController sc = new ServiceController("WakeOnInternetClientService");
                sc.Start();
            }
        }
    }
    

    In der

    OnStart
    

    Methode meines Dienstes starte ich den "ListenThread" für die Netzwerkkommunikation. Folgende Methoden verwende ich um das System herunter zu fahren oder neu zu starten:

    private void SystemShutdown()
            {
                Process.Start("shutdown", "/s /t 0");
            }
    
            private void SystemRestart()
            {
                Process.Start("shutdown", "/r");
            }
    

    Nun zu meinen Fragen:

    Welche

    serviceProcessInstaller.Account
    

    kann ich dazu verwenden und wo sind die Unterschiede?

    Kann man die Mathoden

    SystemShutdown
    

    und

    SystemRestart
    

    ohne Benutzeranmeldung ausführen?

    Der Dienst hat beim testen nach Benutzeranmeldung funktioniert und wird auch automatisch gestartet.

    Mit freundlichen Grüßen,

    VRComputing


Log in to reply