title: Run the Console Application as service
body: <p>I developed c# application, in which the apllication output type is Console Applicatiuon.
  I want to run this application as service.
  The Environment.UserInteractive is always true when i run it from visual studio or just double click on .exe.</p>
  
  <p>Below is my code</p>
  
  <pre><code> static void Main(string[] args)
          {
              // Get the version of the current application.
              Assembly assem = Assembly.GetExecutingAssembly();
              AssemblyName assemName = assem.GetName();
              Version ver = assemName.Version;
              // Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString());
  
              Console.WriteLine("{0} version {1}", assemName.Name, ver.ToString());
  
              TouchService touchService = new TouchService();
  
  
              if (Environment.UserInteractive)
              {
                  bool show_help = false;
                  bool install_service = false;
                  bool uninstall_service = false;
                  string servicename = "";
  
                  OptionSet p = new OptionSet()                  
                    .Add("h|?|help", delegate(string v) { show_help = v != null; })
                    .Add("s|servicename=", "name of installed service", delegate(string v) { servicename = v; })
                    .Add("i|install", "install program as a Windows Service. A valid servicename is needed.", delegate(string v) { install_service = v != null; })
                    .Add("u|uninstall", "uninstall program from Windows Services. A valid servicename is needed.", delegate(string v) { uninstall_service = v != null; });
  
                  List&lt;string&gt; extra;
                  try
                  {
                      extra = p.Parse(args);
                  }
                  catch (OptionException e)
                  {
                      Console.Write("TouchServer: ");
                      Console.WriteLine(e.Message);
                      Console.WriteLine("Try `TouchServer --help' for more information.");
                      return;
                  }
  
                  if (show_help)
                  {
                      ShowHelp(p);
                      return;
                  }
  
                  else if (install_service)
                  {
                      IntegratedServiceInstaller Inst = new IntegratedServiceInstaller();
                      Inst.Install(servicename, null, "Provides XML data over HTTP for Touch clients",                                                              
                                   System.ServiceProcess.ServiceAccount.NetworkService,
                                   System.ServiceProcess.ServiceStartMode.Manual);
  
                      return;
                  }
  
                  else if (uninstall_service)
                  {
                      IntegratedServiceInstaller Inst = new IntegratedServiceInstaller();
                      Inst.Uninstall(servicename);
                      return;
                  }
  
                  // start and run the server,
                  // and receive commands from the console
                  else
                  {
  
                      touchService.OnStart(args);                   
                      while(true)
                      {
                          Console.Write("TouchServer&gt;");                        
                          string commandLine = Console.ReadLine().ToLower();
  
                          if (commandLine == "exit" || commandLine == "x")
                          {
                              break;
                          }
                          if (commandLine == "quit" || commandLine == "q")
                          {
                              break;
                          }
  
                          else if(commandLine == "version" || commandLine == "v")
                          {
                              Console.WriteLine("{0} version {1}", assem.GetName().Name, assem.GetName().Version.ToString());
                          }
  
                          else if (commandLine == "list" || commandLine == "l")
                          {
                              TouchServer.showURLs = (TouchServer.showURLs == false) ? true : false; 
                              Console.WriteLine("List URLs: {0}", (TouchServer.showURLs ? "active" : "inactive"));
                          }
  
                          else if (commandLine == "status" || commandLine == "s")
                          {
                              Console.WriteLine("{0,-20} {1,8}", "Name", "Sessions");                            
                              Console.WriteLine("----------------------------");
                              foreach (Site site in TouchServer.siteCollection.All)
                              {
                                  Console.WriteLine("{0,-20} {1,8}", site.Name, site.AllSessions.Length);
                              }
                              Console.WriteLine();
                          }
                      }
  
                      touchService.OnStop();
                  }
              }
              **else
              {
                  ServiceBase[] ServicesToRun;
                  ServicesToRun = new ServiceBase[] 
                  { 
                      new TouchService() 
                  };
                  ServiceBase.Run(ServicesToRun);
              }**
  </code></pre>
  
  <p>How can i run it as a service, please help me.
  Thanks in advance
  sangita</p>