2016-04-01 11 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 для t1.readLog();. В приведенном выше коде мне приходится жестко кодировать путь, который не является гибким и неприятным. Итак, есть ли все, чтобы справиться с этим?

ответ

0

Вы нарушаете неправильный метод для этого. Взгляните на ServiceBase.OnStart. Он получает массив аргументов, которые могут быть установлены в командной строке так:

sc start MyService arg1 arg2 

Анализировать арг массива, как вы хотите:

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

аргументов инициализации процесса для службы в методе OnStart , а не в основном методе. Аргументы в параметре args массив можно установить вручную в окне свойств для службы в Консоль служб