2

C# を使用して Java Process オブジェクトを取得しようとしています。問題は、コンピューターでいくつかの Java プロセスを実行していることです。

以下は、プロセスを取得するために選択した方法です。

Process[] processes = Process.GetProcessesByName("java");
foreach(Process proc in processes){
    //I need a filter here to get the correct process.
}

Java プロセスは、以下のように私の C# プログラムによっても制御されます。

 ProcessStartInfo startInfo = new ProcessStartInfo();
 startInfo.FileName = javahome + "\\bin\\java.exe";
 startInfo.Arguments = "-jar Example.jar port=88888";
 startInfo.WorkingDirectory = "\\testFolder";
 startInfo.UseShellExecute = false;
 startInfo.CreateNoWindow = true;
 Process proc = new Process();
 proc.StartInfo = startInfo;
 proc.Start();

私が望むのは、プロセスの配列を調べて、別のプログラムで開始したプロセスオブジェクトと同じ引数を持っているものを確認することです。しかし問題は、私がこのようにしたときです:

 Console.WriteLine(proc.StartInfo.Arguments);

私はそれが別のプログラムで開始したプロセスであることを知っていても、そこには何もないことがわかりました。これは私を大いに混乱させました。

誰もこの問題を知っていますか?

4

3 に答える 3

2

そんなことはできません。プロセスを開始するとき、そのプロセスのハンドラーを、値がプロセス引数である辞書に保持します。これが、それをアーカイブする唯一の方法です。

        Dictionary<IntPtr, string> processArguments = new Dictionary<IntPtr,string>();

        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = javahome + "\\bin\\java.exe";
        startInfo.Arguments = "-jar Example.jar port=88888";
        startInfo.WorkingDirectory = "\\testFolder";
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = true;
        Process proc = new Process();
        proc.StartInfo = startInfo;
        proc.Start();

        processArguments.Add(proc.Handle, javahome + "\\bin\\java.exe");

....

        Process[] processes = Process.GetProcessesByName("java");
        foreach (Process proc in processes)
        {
            var arguments = processArguments.Where(x => x.Key.Equals(proc.Handle)).FirstOrDefault().Value;
        }
于 2013-05-09T11:26:55.633 に答える