Avatar billede dex_dexter Nybegynder
15. april 2005 - 08:24 Der er 4 kommentarer og
1 løsning

intro til windows service

jeg mangler en kort intro om hvordan man bygger en windows service.

jeg har skrevet et console program som gør det jeg gerne vil have servicen til , den bruger en timer til at køre min kode i et bestemt interval, er det også sådan man gør i services?
jeg skal have fundet ud af at logge fejlkoder et sted, er eventloggen noget man har adgang til at skrive til på en nem måde?
Avatar billede burningice Nybegynder
15. april 2005 - 09:31 #1
Avatar billede burningice Nybegynder
15. april 2005 - 09:32 #2
ang. logging så ville jeg bruge log4net (http://logging.apache.org/log4net/)
Avatar billede codecow Nybegynder
20. april 2005 - 15:21 #3
Hej her er et komplet eksempel.

Det sværeste ved en service er at man ikke så nemt kan debugge den. derfor bruger jeg den her konstruktion for at kunne køre i debug mode.

#if DEBUG
        TestService service = new TestService();
    service.OnStart( null );
    while( true ) Thread.Sleep( 1000 );
#else


Håber det hjælper dig.


//-----------------------------------------------------------------------------

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Threading;
using System.Runtime.InteropServices;

namespace WindowsService {

    //-----------------------------------------------------------------------------------
    // This class defines the service
    //-----------------------------------------------------------------------------------
    public class TestService : System.ServiceProcess.ServiceBase {

        public enum MessageBeepType {
            Default = -1,
            Ok = 0x00000000,
            Error = 0x00000010,
            Question = 0x00000020,
            Warning = 0x00000030,
            Information = 0x00000040,
        }

        [DllImport("user32.dll", SetLastError=true)]
        public static extern bool MessageBeep(
            MessageBeepType type
        );

        private Container    components = null;
        private EventLog    eventLog;

        //-------------------------------------------------------------------------------
        // Constructor
        public TestService() {
            InitializeComponent();

            // Verify that event logging is enabled
            if( ! System.Diagnostics.EventLog.SourceExists( "MySource" )) {
                System.Diagnostics.EventLog.CreateEventSource( "MySource", "MyLog" );
            }

            eventLog.Source = "MySource";
            eventLog.Log = "MyLog";
        }

        //-------------------------------------------------------------------------------
        // Entry point for application
        static void Main() {
            #if DEBUG
                TestService service = new TestService();
                service.OnStart( null );
                while( true ) Thread.Sleep( 1000 );
            #else
                System.ServiceProcess.ServiceBase[] ServicesToRun;
                ServicesToRun = new System.ServiceProcess.ServiceBase[] { new TestService() };
                System.ServiceProcess.ServiceBase.Run( ServicesToRun );
            #endif
        }

        //-------------------------------------------------------------------------------
        private void InitializeComponent() {
            components = new System.ComponentModel.Container();
            this.ServiceName = "Service";

            // Enable event logging
            this.eventLog = new System.Diagnostics.EventLog();
            ((System.ComponentModel.ISupportInitialize)(this.eventLog)).BeginInit();
            this.eventLog.Log = "MyLog";
            this.eventLog.Source = "MySource";
            ((System.ComponentModel.ISupportInitialize)(this.eventLog)).EndInit();
        }

        //-------------------------------------------------------------------------------
        protected override void Dispose( bool disposing ) {
            if( disposing ) {
                if( components != null ) {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        //-------------------------------------------------------------------------------
        protected override void OnStart( string[] args ) {
            eventLog.WriteEntry( "Service starting..." );
/*
            // Create an instance of a channel
            TcpChannel channel = new TcpChannel(8080);
            ChannelServices.RegisterChannel( channel );
 
            // Register as an available service with the name RemotingTest
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof( TheObject ),
                "MyService",
                WellKnownObjectMode.Singleton );*/

            Thread theService = new Thread( new ThreadStart( ServiceThread ));
            theService .Start();

            eventLog.WriteEntry( "Service started" );
        }

        //-------------------------------------------------------------------------------
        protected override void OnStop() {
            eventLog.WriteEntry( "Service stopped" );
        }

        private static void ServiceThread() {
            while( true ) {
                MessageBeep( 0 );
                Thread.Sleep( 100 );
            }
        }
    }
}
Avatar billede dex_dexter Nybegynder
31. maj 2005 - 11:11 #4
hm... hvordan debugger du på den siger du?
Avatar billede codecow Nybegynder
31. maj 2005 - 17:07 #5
Tjahhh....... hvis du bygger en debug version bliver koden mellem
#if DEBUG og #else udført ellers bliver det andet udført...... så du skal bare bygge en debug version, og så sætte et break point.

Forskellen er at en service skal startes osv. fra service manageren og debug versionen kan køres i IDE'ns debugger.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

European Stonecraft

Intern Navision/BC Supporter

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Capgemini Danmark A/S

IGNITE Graduate Program 2026

Politiets Efterretningstjeneste

AI/ML udvikler i PET