First, testing Windows services
In order for the Windows Service program to function properly, we need to create a program entry point for it, like creating a generic application. Like other applications, Windows services do this in the main () function of Program.cs. First we create an instance of the Windows service in the main () function, which should be an object of a subclass of the ServiceBase class, and then we call a run () method defined by the base class ServiceBase class. However, calling the run () method does not mean that you have started the Windows service program and must wait until the OnStart () method of the object is called to actually start running. If you want to start multiple services at the same time in a Windows service program, you can simply define an instance object for the subclasses of multiple ServiceBase classes in the main () function by creating an array object of the ServiceBase class.
1 namespaceWindowsservicedemo2 {3 Static class Program4 {5 /// <summary>6 ///The main entry point for the application. 7 /// </summary>8 Static voidMain ()9 {Ten servicebase[] ServicesToRun; OneServicesToRun =Newservicebase[] A { - //Service 1 - NewMyService (), the //Service 2 - NewService1 () - }; - Servicebase.run (servicestorun); + } - } +}
Because the Windows service does not have direct user interaction, the status of the service must be known through logging. To test the Windows service, you can do this by rewriting the methods inside the service and logging the log in the method.
1, the new common class, the class has a Writelog log method. The log path is written in the configuration file, enabling the project to be flexible.
1 namespaceWindowsservicedemo2 {3 Public classCommon4 {5 /// <summary>6 ///Record Log7 /// </summary>8 /// <param name= "Strinfo" ></param>9 Public Static voidWritelog (stringstrinfo)Ten { One stringstrpath=configurationmanager.appsettings["FilePath"]; A using(StreamWriter SW =NewStreamWriter (strpath,true)) - { -Sw. WriteLine (Strinfo +", Current time:"+DateTime.Now.ToString ()); the SW. Close (); - } - - } + } -}
View Code
2. In the Service1 design field, right--View the code, open the Service1 code, rewrite OnStart (), OnStop (), OnPause (), OnContinue () method, respectively, Call the common class's Writelog method inside the method to log the service's running state.
1 namespaceWindowsservicedemo2 {3 Public Partial classMyservice:servicebase4 {5 PublicMyService ()6 {7 InitializeComponent ();8 }9 Ten /// <summary> One ///code to execute when the service starts A /// </summary> - /// <param name= "args" ></param> - protected Override voidOnStart (string[] args) the { - Try - { -Common.writelog ("service startup"); + } - Catch(Exception ex) + { ACommon.writelog ("Service startup error:"+Ex. Message); at } - } - - /// <summary> - ///code to execute when the service is stopped - /// </summary> in protected Override voidOnStop () - { to Try + { -Common.writelog ("Service stopped"); the } * Catch(Exception ex) $ {Panax Notoginseng -Common.writelog ("Service Stop error:"+Ex. Message); the } + } A the /// <summary> + ///code executed when the service is paused - /// </summary> $ protected Override voidOnPause () $ { - Try - { theCommon.writelog ("Service suspended"); - }Wuyi Catch(Exception ex) the { - WuCommon.writelog ("Service Pause Error:"+Ex. Message); - } About } $ - /// <summary> - ///code that executes when the service resumes - /// </summary> A protected Override voidOnContinue () + { the Try - { $Common.writelog ("Service Recovery"); the } the Catch(Exception ex) the { the -Common.writelog ("Service Recovery error:"+Ex. Message); in } the } the About } the}
3, in the Service Control Manager to start, pause, resume, stop the service, view the generated log:
Log inside the correct record of the operation of the service status, to prove that the service is not a problem.
Second, debugging Windows services
Debugging a Windows service can take the method of attaching a service to a process.
1. Select Debug-Attach to process in menu bar options
2, in the attach to the process interface, select the appropriate service process, click Attach.
Note: To attach a service to a process, you must ensure that the service is in the boot state, otherwise the process of the service cannot be seen inside the process.
Three, Summary:
1, Windows service debugging cannot be directly F5, can be debugged by attaching to process mode (Debugging premise: Start the service, run as Administrator vs)
2, Windows services because there is no direct user interaction, the status of the service must be known through the log, appropriate to join the try Catch
3, all possible changes in the content should not be written dead, as far as possible through the configuration file to achieve, this is an important indicator of project flexibility
4, Windows services are used for timing operations, large data volume operation, monitoring operations and other aspects
Windows Service two: Testing a new service, debugging a Windows service