WMI を使用してフォーム アプリケーションを使用し、ダッシュ ボードを公開して、コンピューター B からコンピューター A で .bat ファイルを実行しています。.bat ファイルはコマンド ライン ユーティリティ tabcmd.exe を複数回呼び出し、ユーティリティはコンピューター A のログ ファイルを次の場所 "C:\Users[UserName]\AppData\Roaming\Tableau\tabcmd.log"に更新します。
プロセスがコンピューター A で完了したら、コンピューター B のログ ファイルの詳細を使用してフォーム アプリケーションを更新したいと考えています。以下のように使用して .bat ファイルを実行しています。
String path = @"C:\tabcmd.bat";
String machineName = textBox1.Text;
var processToRun = new[] { path };
var connection = new ConnectionOptions();
connection.Username = textBox3.Text;
connection.Password = textBox2.Text;
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", machineName), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
wmiProcess.InvokeMethod("Create", processToRun);
この .bat ファイルは、動的データソース パラメーターに基づいてコンピューター B でダッシュボードを公開するため、.bat ファイルの実行時間は予測できません。
このプロセスをプロセス ID で監視する方法はありますか? もしそうなら、プロセスが完了したらログファイルを読むことができます。cmd.exeはターゲットコンピューターAでまだ実行されているため、以下はこの状況では役に立ちません.
System.Diagnostics.Process prc = System.Diagnostics.Process.GetProcessById(10100, "CHORRL0110")
prc.WaitForExit ()
ご協力いただきありがとうございます!