static int RunMain(string[] arguments)
{
var result = 0;
try
{
CommandLineParameters options = new CommandLineParameters();
CommandLineParser parser = new CommandLineParser(new CommandLineParserSettings(Console.Error));
if(!parser.ParseArguments(arguments, options))
{
return 80;
}
bool commandLineParameterProcessed = false;
if(options.Install)
{
Dev2Logger.Log.Info("Starting Install");
commandLineParameterProcessed = true;
if(!EnsureRunningAsAdministrator(arguments))
{
Dev2Logger.Log.Info("Cannot install because the server is not running as an admin user");
return result;
}
if(!WindowsServiceManager.Install())
{
result = 81;
Dev2Logger.Log.Info("Install Success Result is 81");
}
}
if(options.StartService)
{
Dev2Logger.Log.Info("Starting Service");
commandLineParameterProcessed = true;
if(!EnsureRunningAsAdministrator(arguments))
{
Dev2Logger.Log.Info("Cannot start because the server is not running as an admin user");
return result;
}
if(!WindowsServiceManager.StartService(null))
{
Dev2Logger.Log.Info("Starting Service success. result 83");
result = 83;
}
}
if(options.StopService)
{
Dev2Logger.Log.Info("Stopping Service");
commandLineParameterProcessed = true;
if(!EnsureRunningAsAdministrator(arguments))
{
Dev2Logger.Log.Info("Cannot stop because the server is not running as an admin user");
return result;
}
if(!WindowsServiceManager.StopService(null))
{
Dev2Logger.Log.Info("Stopping Service success. result 84");
result = 84;
}
}
if(options.Uninstall)
{
Dev2Logger.Log.Info("Uninstall Service");
commandLineParameterProcessed = true;
if(!EnsureRunningAsAdministrator(arguments))
{
Dev2Logger.Log.Info("Cannot uninstall because the server is not running as an admin user");
return result;
}
if(!WindowsServiceManager.Uninstall())
{
Dev2Logger.Log.Info("Uninstall Service success. result 92");
result = 82;
}
}
if(commandLineParameterProcessed)
{
Dev2Logger.Log.Info("Command line processed. Returning");
return result;
}
AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
Dev2Logger.Log.Fatal("Server has crashed!!!", args.ExceptionObject as Exception);
};
if(Environment.UserInteractive || options.IntegrationTestMode)
{
Dev2Logger.Log.Info("** Starting In Interactive Mode ( " + options.IntegrationTestMode + " ) **");
using(_singleton = new ServerLifecycleManager(arguments))
{
result = _singleton.Run(true);
}
_singleton = null;
}
else
{
Dev2Logger.Log.Info("** Starting In Service Mode **");
// running as service
using(var service = new ServerLifecycleManagerService())
{
ServiceBase.Run(service);
}
}
}
catch(Exception err)
{
Dev2Logger.Log.Error("Error Starting Server", err);
// ReSharper disable InvokeAsExtensionMethod
Dev2Logger.Log.Error("Error Starting Server. Stack trace", err);
// ReSharper restore InvokeAsExtensionMethod
throw;
}
return result;
}