2014-11-20 2 views
0

그들은 콘솔 응용 프로그램으로 완벽하게 작동합니다. 이것은 내가하는 일입니다 :TopShelf 서비스가 Windows 서비스로 설치되어있는 경우 사용자 지정 명령 줄 인수가 작동하지 않는 이유는 무엇입니까?

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; 
    } 

콘솔 응용 프로그램은 콘솔 로그 응용 프로그램으로서 이것들은 모두 괜찮습니다. 명령 줄에 명령 (모든 사용자 정의 인수를 명령)을 설치하고 명령에서 모든 사용자 정의 인수를 시작하면 trace-log에서 비어 있습니다.

+0

글쎄, 그들은 정말 이상한 이유가없는 것 같습니다. 누가 정상적인 콘솔 응용 프로그램을 작성하는 경우 Topshelf를 사용하려고합니다. 나는 그것을 다시 사용하지 않는다. –

답변

0

내가이 질문을 어리석은 방법으로 묻는 것처럼 정답은 Topshelf에서 지원되지 않는다는 것일뿐입니다.