2014-11-20 4 views
0

Они прекрасно работают как консольное приложение. Это то, что я делаю:Почему пользовательские аргументы командной строки не работают, если служба TopShelf установлена ​​как служба Win?

private static int Main() 
    { 

     string databaseName = null; 
     string databaseUser = null; 
     string databasePwd = null; 
     string port = null; 
     string logDirectory = null; 
     string strLogLevel = null; 

     var exitCode = HostFactory.Run(configurator => 
     { 

      configurator.AddCommandLineDefinition("dbname", d => { databaseName = d; }); 
      configurator.AddCommandLineDefinition("dbuser", d => { databaseUser = d; }); 
      configurator.AddCommandLineDefinition("dbpassword", d => { databasePwd = d; }); 
      configurator.AddCommandLineDefinition("port", p => { port = p; }); 
      configurator.AddCommandLineDefinition("logdirectory", l => { logDirectory = l; }); 
      configurator.AddCommandLineDefinition("loglevel", l => { strLogLevel = l; }); 
      configurator.ApplyCommandLine(); 

      int intPort = 7909; 
      if (port != null) 
       intPort = Convert.ToInt32(port); 

      SystemDataApplication.LogLevel logLevel = SystemDataApplication.LogLevel.Info; 
      if (strLogLevel != null) 
       logLevel = (SystemDataApplication.LogLevel)Convert.ToInt32(strLogLevel); 

      configurator.Service<SystemDataApplication>(service => 
      { 
       service.ConstructUsing(() => new SystemDataApplication(databaseName, databaseUser, databasePwd, intPort, logDirectory, logLevel)); 
       service.WhenStarted(a => a.Start()); 
       service.WhenStopped(a => a.Stop()); 
      }); 

      configurator.SetDescription("An application to fetch system data."); 
      configurator.SetDisplayName("System Data Service"); 
      configurator.SetServiceName("SystemDataService"); 

      configurator.RunAsNetworkService(); 
     }); 

     return (int)exitCode; 
    } 

В качестве консольного приложения оно напечатано в журнале трассировки, что все это в порядке. Если я установил его (все пользовательские аргументы в команде) и запустил его (все пользовательские аргументы в команде) из командной строки, они пусты в журнале трассировки.

+0

ну, похоже, они никогда не были по какой-то действительно странной причине. который хочет использовать Topshelf при написании обычного консольного приложения. Я никогда не использую его снова. –

ответ

0

Как я спросил этот вопрос глупо, правильный ответ может быть только тем, что он не поддерживается в Topshelf.