55using System . ServiceModel ;
66using System . ServiceModel . Description ;
77using System . ServiceModel . Web ;
8+ using System . ServiceProcess ;
89
910using SEModAPI . Support ;
1011
@@ -18,19 +19,61 @@ namespace SEServerExtender
1819{
1920 public static class Program
2021 {
22+ public class WindowsService : ServiceBase
23+ {
24+ public WindowsService ( )
25+ {
26+ this . ServiceName = "SEServerExtender" ;
27+ this . CanPauseAndContinue = false ;
28+ this . CanStop = true ;
29+ this . AutoLog = true ;
30+ }
31+
32+ protected override void OnStart ( string [ ] args )
33+ {
34+ LogManager . APILog . WriteLine ( "Starting SEServerExtender Service with " + args . Length . ToString ( ) + " arguments ..." ) ;
35+
36+ Program . Start ( args ) ;
37+ }
38+
39+ protected override void OnStop ( )
40+ {
41+ LogManager . APILog . WriteLine ( "Stopping SEServerExtender Service ser..." ) ;
42+
43+ Program . Stop ( ) ;
44+ }
45+ }
46+
2147 static SEServerExtender m_serverExtenderForm ;
2248 static Server m_server ;
2349
2450 /// <summary>
2551 /// Main entry point of the application
2652 /// </summary>
2753 static void Main ( string [ ] args )
54+ {
55+ if ( ! Environment . UserInteractive )
56+ {
57+ using ( var service = new WindowsService ( ) )
58+ {
59+ ServiceBase . Run ( service ) ;
60+ }
61+ }
62+ else
63+ {
64+ Start ( args ) ;
65+ }
66+ }
67+
68+ private static void Start ( string [ ] args )
2869 {
2970 //Setup error handling for unmanaged exceptions
3071 AppDomain . CurrentDomain . UnhandledException += AppDomain_UnhandledException ;
3172 Application . ThreadException += Application_ThreadException ;
3273 Application . SetUnhandledExceptionMode ( UnhandledExceptionMode . CatchException ) ;
3374
75+ LogManager . APILog . WriteLine ( "Starting SEServerExtender with " + args . Length . ToString ( ) + " arguments ..." ) ;
76+
3477 CommandLineArgs extenderArgs = new CommandLineArgs ( ) ;
3578
3679 //Setup the default args
@@ -139,6 +182,7 @@ static void Main(string[] args)
139182 {
140183 extenderArgs . noConsole = true ;
141184 extenderArgs . noGUI = true ;
185+ extenderArgs . autoStart = true ;
142186 }
143187
144188 if ( extenderArgs . debug )
@@ -175,7 +219,7 @@ static void Main(string[] args)
175219 }
176220 catch ( AutoException eEx )
177221 {
178- if ( ! extenderArgs . noConsole )
222+ if ( ! extenderArgs . noConsole )
179223 Console . WriteLine ( "AutoException - " + eEx . AdditionnalInfo + "\n \r " + eEx . GetDebugString ( ) ) ;
180224 if ( ! extenderArgs . noGUI )
181225 MessageBox . Show ( eEx . AdditionnalInfo + "\n \r " + eEx . GetDebugString ( ) , @"SEServerExtender" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
@@ -205,6 +249,14 @@ static void Main(string[] args)
205249 }
206250 }
207251
252+ private static void Stop ( )
253+ {
254+ if ( m_server != null && m_server . IsRunning )
255+ m_server . StopServer ( ) ;
256+ if ( m_serverExtenderForm != null && m_serverExtenderForm . Visible == true )
257+ m_serverExtenderForm . Close ( ) ;
258+ }
259+
208260 static void Application_ThreadException ( Object sender , ThreadExceptionEventArgs e )
209261 {
210262 Console . WriteLine ( "Application.ThreadException - " + e . Exception . ToString ( ) ) ;
0 commit comments