2

ネットワーク上の複数のコンピューターに "MyService" という Windows サービスと "MyEXE" という実行可能ファイルがあるとします。

(「MyService」内から)別の/同じコンピューターで「MyEXE」の複数のインスタンスを開始し、何らかのタスクを実行させて、「MyService」のコールバックメソッドに真/偽の結果を返すことは可能ですか?

このようなもの

class MyService : ServiceBase
{
    delegate void UpdateCallBack(int id, bool updated)
    void CheckForUpdates()
    {
        bool updatesExist = someService.GetCurrentVersion() != currentVersion;
        if(updatesExist)
        {
            UpdatePC("C:\Program Files\MyApp.exe", 1, UpdateComplete);
            UpdatePC("\\somepc\Program Files\MyApp.exe", 1, UpdateComplete);
            UpdatePC("\\mypc\Program Files\MyApp.exe", 1, UpdateComplete);
        }
    }

    void UpdatePC(string filePath, int id, UpdateCallBack callback)
    {
       //This is where I am kind of lost 
       SomeEXERunner runner = new SomeEXERunner();
       runner.Run(filePath,"-u",id,callback);
    }

    void UpdateComplete(int id, bool updated)
    {
       //do something
       if(!updated)
          EmailService.NotifyAdmin("PC Not updated", id);
    }
}

多分私はアーキテクチャ全体を間違っています!

4

4 に答える 4

10

できることの 1 つは、別のプロセスで Sysinternals から PsExec ツール ( http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx ) を実行し、結果をファイルにパイプしてから、解析して図にすることです。成功/失敗。

于 2009-04-22T14:31:00.997 に答える
3

イアンが述べたように PSexec を使用することもできますが、例としてこれを試してみるのは WMI の方が良いと思います http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx

于 2009-04-22T14:51:26.220 に答える
0

1 つの解決策は psexec を使用することであり、もう 1 つの解決策は... psexecの機能を実行することです。

  • サービス exe をリソースとしてアプリに埋め込む
  • リソースを \\remotesystem\admin$ にコピーします
  • SCM を使用して、この exe を \\remotesystem 上のサービスとして開始します
  • 接続してサービスに作業を依頼する
  • SCM からサービスをアンインストールする
于 2010-03-06T04:34:02.880 に答える
0

タスク マネージャー API も参照してください。タスクを今すぐ 1 回 + 1 秒後に実行するようにスケジュールします。これは COM ベースであるため、.NET に非常に適しています。

psexec とは異なり、これはターゲット マシンに何もインストールしません。

于 2010-03-06T04:42:57.683 に答える