Windows ネットワークでのリモート プロセスの開始
-
23-08-2019 - |
質問
複数のスレーブ マシンと 1 台のマスター マシンがあり、それらが一緒に分散アプリケーションを実行します。各スレーブ マシンのプロセスには GUI とネットワーク アクセスが必要です (その場合、これは対話型プロセスと呼ばれると思います)。使いやすさを考えると、マスター マシンがこれらのスレーブ マシン上のプロセスを開始/停止できると便利です。
私の最初のアイデアは、WMI と Win32_Process クラスを使用してリモート プロセスを開始することでした。しかし、さらに調査したところ、この方法で開始されたプロセスは非対話的で分離されているため、GUI を持たないことが判明しました。注には、Win32_ScheduledJob.Create を使用してリモートの対話型プロセスを作成できると記載されていますが、LocalSystem アカウントで実行されるため、これは避けたいと思います (また、適切に実行することさえできませんでした)。
この問題を解決するにはどのような良い方法があるでしょうか?おそらく、適切なプロセスを開始するヘルパー アプリケーションを起動することは可能ですが、それは非常に汚いように思えます。
編集:私が試してみたとき、PsExec は非常にぎこちなく、地獄のように遅かったです (理由はわかりません)。PsExec をさらに詳しく見ると、アプリケーションを起動するためにリモート マシンに一時的なサービスがインストールされているようです。これが適切な ID を使用して対話型プロセスを生成する唯一の方法でしょうか?ノードのセットアップにヘルパー サービスを含める必要がありますか?しかし、それでも、どうやってコミュニケーションを取ればいいのでしょうか?
解決
PsExecはは、
ことを行うことができますSysinternalsのスイートの一部でありますhttp://technet.microsoft.com/en-us/sysinternals /bb897553.aspxする
あなたのサーバーでWindows 2008を実行している場合にも使用することができます。
他のヒント
あなたはコマンド "で" 使用することができます。
コマンドラインを開き、入力
at /?
端子に。 1つの欠点は、リモートシステム上の時間は、あなたのいくつかの合理的なデルタ内であることが必要であるということです。また、インスタントではありません。あなたは、リモート・スケジューラは完全にイベントを逃さないことを確認するのに数秒待つ必要があります。
このへのWMI相当するものはあり、そして時と同じ基本的な注意事項があります:
リスト3:コードは、Windows Server 2003上でインタラクティブなプロセスを作成するには、Windows XP、およびWin2KではSP3マシン
Const INTERVAL = "n"
Const MINUTES = 1
strComputer = "compaq575"
strCommand = "calc.exe"
Set objWMIService = _
GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")
Set objSWbemDateTime = _
CreateObject("WbemScripting.SWbemDateTime")
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _
MINUTES, Now()))
intReturnValue = objScheduledJob.Create(strCommand, _
objSWbemDateTime.Value, False, 0, 0, True, intJobID)
WScript.Echo "Job ID: " & intJobID
私は他の方法のほとんどがあるため、脆弱性の様々なサービスパックではオフになってきた(独自のサービスをインストールせずに)それを行うことだと思います。
次の 2 つのポストでは、.NET を使用してリモート プロセスを実行します。
WMI の使用
コードプロジェクトの例
http://www.codeproject.com/KB/IP/RemotingExec.aspx
この例はカスタム資格情報を使用して実行され、リモート実行可能ファイルは Win Form アプリです。お役に立てれば。
は、Windowsサービスとしてこれらのリモートプロセスを実装することも可能です。サービスは(ではないが、デフォルトでは)インタラクティブにすることができ、リモートで各Windows PC上で実行されている標準サービスコントロールマネージャを介して制御することができます。
私が聞いてもいいですか?私は同様のセットアップを持っていますが、唯一の初期セットアップ時にGUIを必要とします。
とにかく、ここで私がやったのですが、残念ながらそれは私はあなたが本当にGUIが必要な場合は、避けるようにしようとしている理解してLocalSystemアカウントとして実行中のプロセスに依存しています。
あなたの背景の少しを与えるために、私が配布していたアプリケーションは、ハドソンのであり、この(少なくとも時のトラブルシューティングを支援するために、セットアップ)あなたはそれを配布する方法は、Java WebStartのアプリケーションを実行している以前のバージョンだったので、GUIの必要性ます。
私がやったことは(幸いにもあなたは一度だけこれを行う、権利を取得する面倒くさされている)のsc.exeを使用してスレーブマシン上のサービスとしてスレーブ・アプリケーションを設定しました。線に沿って何かます:
sc.exe create SlaveService binPath= c:\path\to\slave.exe type= interact DisplayName= "The Slave Service"
のものが必要で、パラメータ(BINPATH =など)の後にスペースに注意してください。私はそれが簡単「=タイプの対話」ドロップし、手動でサービスコンソールにそれを変更することがわかっもあることに注意してください。
次に、マスターに、またのsc.exeを使用して、私はリモートでサービスを開始します:
sc.exe \\slavemachine start SlaveService
、プログラムがスレーブマシン上で実行されていたことを確認します。
さて私の場合、私は本当に初期のトラブルシューティングのため以外のGUIを、必要はありませんでした。できるだけ早く私が正常に実行されているすべてのものを得たとして、私は単にもはや対話モードでは、サービスアカウントとして実行するサービスを構成しません。
私は、あなたが、これが役に立つことを願ってます。
あなたはこれを実現するために必要になるだろう部品のカップルがあります。
まず、あなたがリモートマシンと通信する方法が必要になります。
第二に、あなたはあなたのアプリケーションを起動することができ、リモートマシンのリスニングで何かをする必要があります。
上記のすべての他の提案は限り与えられたソリューションのいずれかの制限が適切であるとして、罰金です内蔵の一つまたはこれらのコンポーネントの両方のために何かを、使用します。
PsExecは最も有望な、アウトオブボックスソリューションのように見えます。そうしないと、あなただけの適切なサブプロセスを起動何でもしてTCP /名前付きパイプ/経由の単純なメッセージを聞くために、独自のアプリをロールバックすることができます。それとの唯一の注意点は、あなたがマシンのいずれかが公開されている場合は特に、セキュリティの周りにはかなり慎重になりたいでしょうです。
PsToolsのスイートは、Sysinternalsのによって開発され、同社はいくつかの時間後にマイクロソフトに買収されたことをとてもすばらしいありました。これらのツールを使用すると、あなたのタスクを達成するための最良の方法です。
私はあなたが対話的にアプリケーションを実行すると、問題を言及ご覧ください。私は私が対話的にアプリケーションを実行するために切り替え/を使用して提案することができます。 PsToolsのは、あなたが探している機能のすべてを提供しています。あなたは自分の所望の結果を得るために、スイッチで遊んでする必要があります。
私はあなたがPsToolsのを使用する私のアプリケーションで記述遅さを経験したことがありません。
MPICH2 には、多くの場合、ハイパフォーマンスコンピューティングクラスタで使用されているとことができるはずですあなたがやりたいです。あなたがマシン間でメッセージを渡すためにそれを使用していない場合でも、親機からのすべてのプロセスを起動するために、そのプロセスランチャーを使用することができます。マシン上の特定のWindowsユーザーとして認証するように設定することもできます。