如何等待用户进程的系统进程?

如何等待用户进程的系统进程?,第1张

概述如何等待用户进程系统进程?

我有一个.net windows服务作为本地系统运行。 我有另一个.net进程,需要等待服务终止。 该进程不知道服务名称,因此无法查询服务控制pipe理器。 它确实知道服务进程ID。 我可以修改windows服务和其他进程的来源。

当我做:

process = Process.GetProcessByID(processID); process.WaitForExit();

从另一个过程中,我得到:

System.ComponentModel.Win32Exception: Access is denIEd Stack trace: at System.Diagnostics.Process.GetProcessHandle(Int32 access,Boolean throwIfExited) at System.Diagnostics.Process.WaitForExit(Int32 milliseconds)

GetProcessHandle调用OpenProcess 。 显然,目标进程应该允许上述SYNCHRONIZE位工作,理论上可以通过windows服务中的SetSecurityInfo来设置。 但是,似乎没有一个简单的方法来做到这一点在短短几个pinvokes升级,启用特权,最后改变安全。

拦截打印作业以添加额外的数据

.NET Framework windows XP错误,Visual Studio Express

当用户login到windows时,ToolStripbutton从PropertyGrID中消失

制作autorun应用程序的最佳解决scheme?

如何deBUGging挂起的WPF应用程序?

我忽略了从用户进程中等待另一个(系统)进程的简单方法吗?

如何获得正在运行的windows服务应用程序的命令行参数?

MSMQ:将客户端从windows XP移到windows 7,在Ping中执行

颜色字体字形

dynamic添加comboBox中的项目和用户添加的项目应该是永久性的,而不使用数据库,是可能的?

运行Mono的最佳linux发行版

如果您知道服务进程标识,为什么您不能获取服务名称并从进程中检查服务状态如下?

Process process = Process.GetProcessByID(1); ServiceController windowsService = ServiceController.GetServices().FirstOrDefault(x => x.Servicename == process.Processname); //Wait until the windows service stops running while (windowsService.Status == ServiceControllerStatus.Running) { Thread.Sleep(1000); }

尝试使用相同的用户帐户来启动服务和您的程序,或使用内置的管理员帐户来运行您的程序(windows Vista和之后)。

如果仍然抛出异常,请尝试设置计算机的DEP(数据执行保护)设置。

更新:也许你可以使用这个愚蠢的代码。获取服务名称的麻烦,因为它可能不同于Process.name。

static ServiceController GetServiceControllerByPID(int processID) { string servicename = ""; string qry = "SELECT name FROM WIN32_SERVICE WHERE PROCESSID = " + processID.ToString(); System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(qry); System.Management.ManagementObjectCollection mngntObJs = searcher.Get(); foreach (System.Management.ManagementObject mngntObj in mngntObJs) { servicename = (string)mngntObj["name"]; } if (servicename == "") { return null; } return System.ServiceProcess.ServiceController.GetServices().FirstOrDefault(x => x.Servicename == servicename); }

调用这个函数,并监视ServiceController.Status

总结

以上是内存溢出为你收集整理的如何等待用户进程的系统进程?全部内容,希望文章能够帮你解决如何等待用户进程的系统进程?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存