我正在尝试使用 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();
我想要的是遍历 Process 数组来检查哪一个与我在另一个程序中启动的 Process 对象具有相同的参数。 但问题是当我这样做时:
Console.WriteLine(proc.StartInfo.Arguments);
我发现里面什么也没有,即使我知道这是我在另一个程序中启动的进程。这让我很困惑。
有人知道这个问题吗?
最佳答案
你不能那样做。当您启动一个进程时,将该进程的处理程序保留在一个字典中,其中的值是进程参数,这是我认为您存档该进程的唯一方法。
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;
}
关于c# - 如何使用 C# 从 java 进程获取带有参数的 ProcessStartInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460532/