3

我目前正在尝试实现一个运行特殊命令的服务,该命令对传递的参数执行某些操作,例如:文件路径。我正在使用cmd命令:

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

我可以输入的唯一参数是int commandfor 方法。我想输入一个folder pathfor t1.readLog();。在上面的代码中,我必须对不灵活且麻烦的路径进行硬编码。那么,有没有办法解决这个问题?

4

1 回答 1

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 方法中。args 参数数组中的参数可以在服务控制台的服务属性窗口中手动设置

于 2016-04-03T15:22:19.523 回答