2016-04-01 6 views
1

Ich versuche derzeit, einen Dienst zu implementieren, der einen speziellen Befehl ausführt, der etwas mit übergebenen Argumenten ausführt, zum Beispiel: Dateipfade. Ich bin mit dem cmd Befehl:C# service onCustomCommand mit Parametern?

sc control "ServiceName" 128

jedoch dieser Befehl keine Möglichkeit zur Eingabe von Argumenten für mich bereitstellt. Das Verfahren ist wie nachstehend:

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

Das einzige Argument kann die i Eingang intcommand für das Verfahren ist. Ich möchte eine folder path für t1.readLog(); eingeben. In dem obigen Code muss ich den Pfad fest codieren, der nicht flexibel und mühsam ist. Also, gibt es das irgendwie, um das herauszufinden?

Antwort

0

Sie überschreiben die falsche Methode dafür. Schauen Sie sich ServiceBase.OnStart an. Es wird Array von Argumenten, die in Befehlszeile wie folgt eingestellt werden:

sc start MyService arg1 arg2 

Parse args-Array, wie Sie wollen:

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

Prozessinitialisierung Argumente für den Dienst in der Methode OnStart , nicht in der Main-Methode. Die Argumente im args-Parameterfeld können manuell im Eigenschaftenfenster für den Dienst in der Servicekonsole

festgelegt werden