问题描述
如何为我创建的另一个进程启动的新进程标识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
进程在运行,所以我不能简单地检查进程树,其中一些可能是在最近启动的,甚至与我创建的进程几乎同时启动。
到目前为止,我有一些想法:
- 将元数据附加到启动替换过程时可以跟踪的过程-我不知道该怎么做。
- 跟踪某个流程(即启动新流程的原始流程)的父PID,同样,我也看不到这样做的方法。
- 目前,我最好的主意是将RDP文件复制到临时位置,并在文件名后附加GUID。这有
将GUID添加到窗口标题中的效果,允许PID
被追踪-但是这感觉很棘手,我宁愿不要复制
RDP文件(如果可以的话),而且我不确定
mstsc
在没有RDP的其他情况下将不会以这种方式表现 文件。 - 在启动我的进程之前列出所有
mstsc
进程,然后在启动后与列表进行比较,以识别所有新进程。在大多数情况下,这是可行的,但是我不能确定其他mstsc
进程不会与我的进程同时启动。如果我确定了错误的过程,那么我可能会破坏其他活动。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)