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 command、メソッドの です。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];
}

Main メソッドではなく、OnStart メソッドでサービスの初期化引数を処理します。args パラメーター配列の引数は、サービス コンソールのサービスのプロパティ ウィンドウで手動で設定できます。

于 2016-04-03T15:22:19.523 に答える