需要跟踪在C#中启动的流程的变化PID

问题描述

如何为我创建的另一个进程启动的新进程标识PID?

我有启动远程桌面连接(mstsc.exe)的代码,并且在大多数情况下都能正常工作:

Process rdcProcess = new Process();
rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\mstsc.exe");
rdcProcess.StartInfo.UseShellExecute = true;
rdcProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
if (rdpFile != "") rdcProcess.StartInfo.Arguments = rdpFile;
else if (host != "") rdcProcess.StartInfo.Arguments = "/v " + host;
rdcProcess.Start();

int pid = rdcProcess.Id;

这在90%的时间内效果很好。但是,有一种情况我知道mstsc在启动后将在哪里启动替换过程,而不是使用新的PID(特别是在启动与RDP文件的远程连接并通过Remote时)台式机网关,尽管可能还会有其他情况。

我需要知道这个新过程的PID。通常将有许多mstsc进程在运行,所以我不能简单地检查进程树,其中一些可能是在最近启动的,甚至与我创建的进程几乎同时启动。

到目前为止,我有一些想法:

  1. 将元数据附加到启动替换过程时可以跟踪的过程-我不知道该怎么做。
  2. 跟踪某个流程(即启动新流程的原始流程)的父PID,同样,我也看不到这样做的方法。
  3. 目前,我最好的主意是将RDP文件复制到临时位置,并在文件名后附加GUID。这有 将GUID添加到窗口标题中的效果,允许PID 被追踪-但是这感觉很棘手,我宁愿不要复制 RDP文件(如果可以的话),而且我不确定mstsc 在没有RDP的其他情况下将不会以这种方式表现 文件。
  4. 在启动我的进程之前列出所有mstsc进程,然后在启动后与列表进行比较,以识别所有新进程。在大多数情况下,这是可行的,但是我不能确定其他mstsc进程不会与我的进程同时启动。如果我确定了错误的过程,那么我可能会破坏其他活动。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...