2016-04-01 86 views
1

我目前正試圖實現一個服務,該服務運行一個特殊的命令,通過參數傳遞一些東西,例如:文件路徑。我使用的是cmd命令:帶參數的C#服務onCustomCommand?

sc control "ServiceName" 128

但是,該命令不爲我輸入參數提供任何方法。該方法如下:

protected override void OnCustomCommand(int command) 
    { 
     switch(command) 
     { 
      case 128: 
       Command.StartProcess(3); 
       LogWriter.WriteLog("Next output: "); 
       Command.StartProcess(4); 
       break; 
      case 129: 
       // input extension, output extension, key id , working path 
       try 
       { 
        test t1 = new test(); 
        t1.readLog(@"C:\Users\Joe\Desktop\success.txt"); 
        LogWriter.WriteLog(t1.input); 
        LogWriter.WriteLog(t1.output); 
       } 
       catch(Exception e) 
       { 
        LogWriter.WriteLog(e.ToString()); 
       } 
       finally { LogWriter.WriteLog("abc"); } 
       //LogWriter.WriteLog(t1.output + "def"); 
       break; 
     } 
    } 

我可以輸入的唯一參數是所述intcommand的方法。我想爲​​輸入folder path。在上面的代碼中,我必須對不靈活和麻煩的路徑進行硬編碼。那麼,無論如何要解決這個問題嗎?

回答

0

您正在爲此重寫錯誤的方法。看看ServiceBase.OnStart。 它得到的參數數組,可以在命令行中設置這樣的:

sc start MyService arg1 arg2 

解析args數組,只要你想:

protected override void OnStart(string[] args) 
{ 
    var path = args[0]; 
    var someParameter = args[1]; 
} 

在OnStart中 方法的服務進程初始化參數,而不是Main方法。參數 陣列中的參數可以在 中的服務的屬性窗口中手動設置,服務控制檯