0

バッチ ファイルとカスタム サービスを組み合わせて、別の PC でアプリケーションを起動するツールを作成しようとしています。

現時点では、私のプログラムは、ボタンを押すと 1 つの特定のプログラムしか実行しません。ボタンを押すと(winformに保持されています)、ターゲットPCで見つかったexeを実行するバッチファイルが開始されます。そのようです:

    // when the service starts open paint
    protected override void OnStart(string[] args)
    {


        // name of the application to launch
        String applicationName = "C:\\TargetFolder\\Target.exe";

        // launch the application
        ApplicationLoader.PROCESS_INFORMATION procInfo;
        ApplicationLoader.StartProcessAndBypassUAC(applicationName, out procInfo);
    }

次に、閉じるボタンを押すと、これが起こります

   // when the service is stopped close the client
    protected override void OnStop()
    {


        // name of the application to launch
        String batchFile = "C:\\BatchFiles\\KillClient.bat";


        // launch the application
        ApplicationLoader.PROCESS_INFORMATION procInfo;
        ApplicationLoader.StartProcessAndBypassUAC(batchFile, out procInfo);
    }

私のwinformはこのバッチファイルを実行します:

@echo off
net start "MyNewService" 

ただし、X量のサービスを追加する必要なく、ボタンに応じて元のツールが特定のexeを開くようにしようとしています。誰の唯一の仕事は、この 1 つの exe を実行することです。

たとえば、1 つのボタンでペイントを開始し、別のボタンでそれを閉じ、別のボタンで単語を開き、最後のボタンでそれを閉じます。サービスでこれを行うにはどうすればよいですか?

4

2 に答える 2

1

UI があり、ユーザーの操作が必要なプログラムにはサービスを使用しません。

サービスは、人間の介入なしにバックグラウンドで静かに実行されるプログラムを対象としています (おそらく開始と停止を除いて)。

人間との対話が必要な場合は、通常の Windows アプリケーション (WinForms、WPF など) を作成する必要があります。

于 2012-11-14T12:34:37.020 に答える
0

ここ数年、Windows オペレーティング システムのセキュリティを強化するために多大な努力が払われてきたため、上記の Chris の回答を慎重に検討する必要があります。Vista で導入された 1 つの変更 (私はそれを最近と呼んでいます :)) は、サービスが以前のように「User1」ではなく「User0」として実行されるようになったことです。User0 には画面へのアクセス権がありません。

あなたがやろうとしているのは、セキュリティをバイパスすることです。上で述べました - ユーザーがターゲット マシンにログオンしていない場合に何が起こるかを考えてみてください。少し後戻りして、要件をより厳密に策定する必要があるように思えます。

そうは言っても、質問のタイトルは、パラメーターを Windows サービスに渡す方法を尋ねています。2つの答えが思い浮かびます -

  1. おそらく、サービスを WCF サービスとして実装できます (Windows サービスではありません)。これにより、渡したい引数を受け取るメソッドを定義できます。WCF には、さまざまな方法でホストできるという柔軟性もあります。したがって、これにより、クリスと私が提起した問題のいくつかが解決される可能性があります。特定のユーザーがログインしたときに実行されるコンソール ホストは、特定の問題に対してより適切な場合があります。また、Windows サービスで WCF サービスをホストすることもできます。これについては、上記のすべての予約とともに言及します。

  2. リッスン ソケットを開く Windows(NT) サービスを実装できます。ランチャー アプリは、ソケット会話を介して接続し、パラメーターを渡します。

間違いなく他の方法があります。

于 2012-11-14T13:24:44.140 に答える