Laden...

Windows-Dienst wird zwar gestartet, funktioniert aber nicht wie gewünscht

Erstellt von PaulchenP vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.767 Views
P
PaulchenP Themenstarter:in
2 Beiträge seit 2014
vor 9 Jahren
Windows-Dienst wird zwar gestartet, funktioniert aber nicht wie gewünscht

Hallo,
ich versuche gerade einen Dienst einzurichten, der auf diverse PowerEvent-Nachrichten reagieren kann. Der Dienst an sich scheint laut Dienste-Panel soweit zu laufen und in der LogDatei wird auch das Starten bzw. Beenden des Dienstes protokolliert. Schicke ich den PC jedoch in den StandBy und wecke ihn wieder auf, ist nichts in die Logdatei eingetgragen worden.
Der Dienst wurde mit InstallUtil.exe via CMD ohne weitere Parameter installiert. Die Anmeldung habe ich aus Verzweiflung auch schon auf "lokales Systemkonto" sowie ".\Admin" gestellt und auch mal das Häkchen bei "Datenaustausch zwischen Dienst und Desktop zulassen" gesetzt, leider ohne Erfolg. Ich habe die Exe mit Visual Studio 2012 / .Net 4 unter Windows 7 Prof 64 Bit erstellt. Reicht es bei einem Dienst für das Empfangen derartiger Events aus, die CanHandlePowerEvent-Eigenschaft auf TRUE zu setzen und die ServiceBase-Methode zu überschreiben?

Hat von euch jemand eine Idee, wo der Fehler liegt?

namespace WinServiceProject
{
    using System;
    using System.IO;
    using System.ServiceProcess;
    class WinService : System.ServiceProcess.ServiceBase
    {
        private string folderPath = @"c:\logs";
        static void Main()
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun =
            new System.ServiceProcess.ServiceBase[] { new WinService() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
        private void InitializeComponent()
        {
            this.ServiceName = "WinService";
            this.CanHandlePowerEvent = true;
        }
        protected override void OnStart(string[] args)
        {
            WriteLog("Gestartet");
        }
        protected override void OnStop()
        {
            WriteLog("Beendet");
        }
        protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
        {
            WriteLog(powerStatus.ToString());
            return base.OnPowerEvent(powerStatus);
        }
        private void WriteLog(string text)
        {
            if (!System.IO.Directory.Exists(folderPath))
                System.IO.Directory.CreateDirectory(folderPath);
            FileStream fs = new FileStream(folderPath + "\\logDatei.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            m_streamWriter.WriteLine(text + " - " +
                DateTime.Now.ToShortDateString() + " " +
                DateTime.Now.ToLongTimeString() + "\n");
            m_streamWriter.Flush();
            m_streamWriter.Close();
        }   
    
    }
}

Viele Grüße,
PaulchenP

4.221 Beiträge seit 2005
vor 9 Jahren

InitializeComponent ? 😃

Edit: InitializeComponent aufrufen könnte helfen

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

742 Beiträge seit 2005
vor 9 Jahren
P
PaulchenP Themenstarter:in
2 Beiträge seit 2014
vor 9 Jahren

Hallo Programmierhans,

vielen Dank für den Tipp, das war die Lösung! 👍
Ich nahm fälschlicherweise an, dass diese Methode automatisch aufgerufen wird.

Viele Grüße,
PaulchenP