c# - How to restart a windows service after an unhandled exception occurs -
i have console application ftp server. console application works fine. now, want run ftp server using windows service.
i have unhandled exception trapper traps unhandled exception. after exception occurs, want stop service, destruct class ftp server, delay 10 seconds , restart service.
following code (the ftp server , service works fine if there no unhandled exception want stop , restart service. code stops service fine doesn't restart it). ideas?
public partial class ftpservice : servicebase { private static ftpserver _ftpserver; public ftpservice(string[] args) { initializecomponent(); string eventsourcename = "ftp server events"; eventlog1 = new system.diagnostics.eventlog(); string logname = "ftp server log"; if (args.count() > 0) { eventsourcename = args[0]; } if (args.count() > 1) { logname = args[1]; } eventlog1 = new system.diagnostics.eventlog(); if (!system.diagnostics.eventlog.sourceexists(eventsourcename)) { system.diagnostics.eventlog.createeventsource(eventsourcename, logname); } eventlog1.source = eventsourcename; eventlog1.log = logname; if (!system.diagnostics.eventlog.sourceexists("ftp server events")) { system.diagnostics.eventlog.createeventsource( "ftp server events", "ftp server log"); } this.servicename = "ftp service"; this.autolog = true; } public static void main(string[] args) { servicebase.run(new ftpservice(new string[0])); } protected override void onstart(string[] args) { base.onstart(args); var database = new database(); // gets database details ftp server tals database. var configurationmanager = new configurationmanagerwrapper(); // same above _ftpserver = new ftpserver(new assemblies.ftp.filesystem.standardfilesystemclassfactory(database, configurationmanager)); _ftpserver.start(); //starts service (ftp server works fine if there no handled exception) eventlog1.writeentry("started"); ftpservermessagehandler.message += messagehandler_message; appdomain.currentdomain.unhandledexception += unhandledexceptiontrapper; } protected override void onstop() { _ftpserver.stop(); // calls destructor ftp server, close tcp listening connections, etc base.onstop(); // here stop service itself. eventlog1.writeentry("stopped"); thread.sleep(10000); } protected void unhandledexceptiontrapper(object sender, unhandledexceptioneventargs e) // unhandled exception handler { eventlog1.writeentry(e.exceptionobject.tostring()); thread.sleep(5000); onstop(); // calls onstop stops ftp server , destroys previous objects of ftp server var servicemgr = new servicecontroller(); servicemgr.start(); // here want restart service (it doesn't work) } }
Comments
Post a Comment