Avatar billede claushelth Nybegynder
02. januar 2004 - 09:21 Der er 9 kommentarer og
1 løsning

simpel windows service

Jeg er ved at lave min første windows service

Det enese den skal er at skrive i en fil ved start og stop af servicen.

Jeg har gennemgået eksemplet herfra: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkwalkthroughcreatingwindowsserviceapplication.asp

og det virkerde fint, men nu vil jeg selv bestemme hvad og hvor der skal skrives ved start og stop. Jeg har fundet et andet kodeeksempel, og sammensat disse to.
Jeg kan compile mit projekt og installere det som en service, men den dukker aldrig op på listen over de forskellige services?

min kode er meget simpel og følger her:

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.IO;

namespace MyNewService2Ed
{
    public class MyNewService2Ed : System.ServiceProcess.ServiceBase
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public MyNewService2Ed()
        {
            // This call is required by the Windows.Forms Component Designer.
            InitializeComponent();

            // TODO: Add any initialization after the InitComponent call
        }

        // The main entry point for the process
        static void Main()
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
   
            // More than one user Service may run within the same process. To add
            // another service to this process, change the following line to
            // create a second service object. For example,
            //
            //  ServicesToRun = new System.ServiceProcess.ServiceBase[] {new MyNewService2Ed(), new MySecondUserService()};
            //
            ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyNewService2Ed() };

            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            //
            // MyNewService2Ed
            //
            this.ServiceName = "MyNewService2Ed";

        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        /// <summary>
        /// Set things in motion so your service can do its work.
        /// </summary>
        protected override void OnStart(string[] args)
        {
            // create or open the file. Default path is "C:\windows\System32\"
            FileStream fs = new FileStream(@"c:\temp\MyNewService2Ed.txt" , FileMode.OpenOrCreate,    FileAccess.Write);
            StreamWriter m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            m_streamWriter.WriteLine(" MyNewService2Ed: Service Started \n");
            m_streamWriter.Flush();
        }

        /// <summary>
        /// Stop this service.
        /// </summary>
        protected override void OnStop()
        {
            FileStream fs = new FileStream(@"c:\temp\MyNewService2Ed.txt" , FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            m_streamWriter.WriteLine(" MyNewService2Ed: Service Stopped \n");
            m_streamWriter.Flush();

        }
    }
}
Avatar billede claushelth Nybegynder
02. januar 2004 - 09:24 #1
i får lige koden uden alt det udkommenterede...er lidt mere læse venligt:

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.IO;

namespace MyNewService2Ed
{
    public class MyNewService2Ed : System.ServiceProcess.ServiceBase
    {
        private System.ComponentModel.Container components = null;

        public MyNewService2Ed()
        {
            // This call is required by the Windows.Forms Component Designer.
            InitializeComponent();
        }

        static void Main()
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
   
            ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyNewService2Ed() };

            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
   
        private void InitializeComponent()
        {
            //
            // MyNewService2Ed
            //
            this.ServiceName = "MyNewService2Ed";

        }

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

        protected override void OnStart(string[] args)
        {
            // create or open the file. Default path is "C:\windows\System32\"
            FileStream fs = new FileStream(@"c:\temp\MyNewService2Ed.txt" , FileMode.OpenOrCreate,    FileAccess.Write);
            StreamWriter m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            m_streamWriter.WriteLine(" MyNewService2Ed: Service Started \n");
            m_streamWriter.Flush();
        }

        protected override void OnStop()
        {
            FileStream fs = new FileStream(@"c:\temp\MyNewService2Ed.txt" , FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter m_streamWriter = new StreamWriter(fs);
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            m_streamWriter.WriteLine(" MyNewService2Ed: Service Stopped \n");
            m_streamWriter.Flush();
        }
    }
}
Avatar billede jepsen999 Nybegynder
06. januar 2004 - 07:49 #2
Har du tilføjet en installer ?
Jeg har kopieret din service-kode ind i et projekt og tilføjet en installer ved "Add installer"-funktionen i visual studio.
Herefter har jeg ændret i installeren så servicen kører som localsystem-account istedet for user.
Tilsidst er servicen installeret ved kommandolinien:
"installutil.exe dinservice.exe"

- og det virker
Avatar billede claushelth Nybegynder
06. januar 2004 - 08:00 #3
hmm, nej det havde jeg ikke...jeg troede egentlig ikke den var nødvendig. Hvad er det lige den gør?
Avatar billede jepsen999 Nybegynder
06. januar 2004 - 08:16 #4
Jeg er ikke sikker, da den eneste simple service jeg har lavet faktisk gør det samme som din ;)
Men udover at angive hvilken account servicen skal køre som, fortæller den noget om hvad der skal ske hvis det går galt og installationen skal afbrydes.

Alt det bliver dog autogenereret i vores simple service af visual studio.
Avatar billede claushelth Nybegynder
06. januar 2004 - 08:30 #5
Ok..fair nok.. :-) smid et svar og jeg forsøger igen ;-)
Avatar billede jepsen999 Nybegynder
06. januar 2004 - 08:32 #6
Held og lykke med det... ;)
Avatar billede claushelth Nybegynder
06. januar 2004 - 09:14 #7
hmm, nu har jeg forsøgt...og hvis jeg indsætter en installer og intallere den så kan jeg starte den og der skrives i logfilen, men den kan ikke stoppes på korrekt vis.
Den har tager over 500 ram fra computeren. Til sidst stopper den, dog med en fejl besked, men den skriver ikke i loggen at den er stoppet, og den frigiver heller ikke rammene igen. Ude på service listen kan jeg hverken starte eller stoppe den efter denne aktion?
Avatar billede jepsen999 Nybegynder
06. januar 2004 - 18:20 #8
hehe ja den er ikke lige sådan at komme af med igen.

Din filestream bliver aldrig lukket og når servicen stopper kan den derfor ikke åbnes igen.

m_streamWriter.Close();
fs.Close();

tilsidst i onstart og onstop løser det.
Avatar billede jepsen999 Nybegynder
06. januar 2004 - 18:41 #9
forresten :
Hvis du prøver igen skal du først afinstallere servicen før den kan installeres igen

installutil dinservice.exe /u
Avatar billede claushelth Nybegynder
06. januar 2004 - 18:41 #10
hehe..ok..takker...skal vist lige igang med at læse lidt igen :-)
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