有没有一种方法来检测是否当一个进程在C#.Net 2.0中启动另一个进程?

有没有一种方法来检测是否当一个进程在C#.Net 2.0中启动另一个进程?,第1张

概述有没有一种方法来检测是否/当一个进程在C#.Net 2.0中启动另一个进程?

我正在寻找一种方法来检测一个由我的应用程序启动的进程是否产生了额外的进程。 希望是我可以有一个线程,启动和应用程序,观看,直到它退出,然后触发一些其他行动,当该应用程序退出。 问题是,我想监视的一些应用程序,他们正在开始一个额外的过程,然后退出。 所以我的触发器在应用程序退出之前触发。

例如,我在一个Process中启动一个程序。 该可执行文件做一些文件修补,然后启动主程序 – 一个单独的exe – 然后退出。 这会导致Process.HasExited返回true,这会过早地触发我的触发器。 我真正关心的是主程序何时退出,在这种情况下,最初的进程开始的程序,但我似乎无法find一种方法来编程。

如何使用WinAPI读取MessageBox文本

如何确定文件系统在.net中是否区分大小写?

这是TextBox控件之间不一致的行为

我怎样才能让光盘在DVD ROM驱动器中旋转?

c#TrimEnd删除更多需要?

好的,我明白了。 使用.Net 2.0中的Process类不能直接访问父进程信息,但使用System.Diagnostics.PerformanceCounter类可以从“创建进程ID”计数器名称访问父进程ID。 解决我的问题我做了类似的事情:

... /// check to see if the monitored application (started in myProcess) is still running public bool isRunning() { bool running = !this.myProcess.HasExited; if(!running){ foreach (Process p in Process.GetProcesses()) { PerformanceCounter pc = new PerformanceCounter("Process","Creating Process ID",p.Processname); if (this.myProcess.ID == (int)pc.RawValue) { running = true; } } } return running; } ...

在这个例子中,我忽略了错误处理,作为更高级的解决方案,您可以通过维护所有分支进程ID的列表来跟踪生成的进程树,这个例子只监视一个直接的子进程。

如果其他进程是专有的/不在你的控制之内,我真的不知道如何监视它们是否产生了新的进程,更重要的是如果你想检查产生的进程是否产生了孙子进程和…(你知道我要去哪里)。

无论如何,这是我的意见,它可能是可以的,我只是不认为它可以实现使用.NET / C#单独。

希望别人能提供一个真正的解决方案。

我认为,这不是很简单,但可行。

在这种情况下,我会选择使用WMI。 你首先开始枚举现有的进程[以太方式,WMI或净进程],并记住这些,你会看。 然后,您启动两个WMI事件查询,一个使用Win32_ProcessstartTrace ,另一个查询Win32_ProcessstopTrace [请参阅WMI SDK]。 两者都返回一个包含“ParentProcessID”的Win32_Process实例。 如果这是其中之一,那么您之前已经保存过,您就有了这个产卵过程。 “Win32_Process”也包含一个“杀死”的方法;没有线索,你最终想做什么;-)

希望这可以帮助。 不要犹豫,要求更多的细节。

BR – mabra

总结

以上是内存溢出为你收集整理的有没有一种方法来检测是否/当一个进程在C#.Net 2.0中启动另一个进程?全部内容,希望文章能够帮你解决有没有一种方法来检测是否/当一个进程在C#.Net 2.0中启动另一个进程?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存