C# 来自进程的Id。有时开始匹配,有时不开始匹配

C# 来自进程的Id。有时开始匹配,有时不开始匹配,c#,.net,process,system.diagnostics,taskmanager,C#,.net,Process,System.diagnostics,Taskmanager,我想从C代码运行 现在,为了比较,我将举两个例子 Process fluent = Process.Start(@"C:\Program Files\ANSYS Inc\v130\fluent\ntbin\win64\fluent.exe", @"2ddp file.jou"); Process browser = Process.Start("IExplorer.exe", "http://www.google.com"); 为什么C代码中的browser.ID与TaskManager中的

我想从C代码运行

现在,为了比较,我将举两个例子

Process fluent = Process.Start(@"C:\Program Files\ANSYS Inc\v130\fluent\ntbin\win64\fluent.exe", @"2ddp file.jou");

Process browser = Process.Start("IExplorer.exe", "http://www.google.com");
为什么C代码中的
browser.ID
与TaskManager中的相同?为什么代码中的
fluent.ID
与TaskManager中的不同

是因为Fluent的特点还是我犯了一些错误


主要问题是:如何运行Fluent并在C代码中捕获其ID?

这几乎肯定与Fluent的特性有关。如果无法从Process.Start中获取(相关的)PID,则可能需要启动该进程,然后进入等待循环并尝试按名称检索该进程(请参阅:-我认为您应该传入没有.EXE的EXE名称)


这个解决方案到底有多强大取决于你能预测Fluent的特性,而这看起来已经很困难了。我绝对推荐使用Process Explorer(如上所述),以及熟悉其他系统内部工具,它们在这些情况下提供了大量的洞察力。

回答Daniel B是可以的,但如果我需要启动几个Fluent实例,它就不起作用了。因此,我找到的最佳解决方案是批准
命令行
参数,然后在任务管理器中搜索

Random guess,这是一个java应用程序,processid是主机javaw?任务管理器中的其他位置是否列出了另一个进程的ID?即使它不是java应用程序,您调用的
fluent.exe
仍可能启动另一个实际运行的子进程(甚至是它自己),如@Alex K.所说。这也会导致在C#和任务管理器中观察到不同的进程ID。如果没有流利的口语,很难说。您可能希望使用SysInternals中的Process Monitor启动fluent.exe,并监视正在创建的子进程。