我有一个.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
总结以上是内存溢出为你收集整理的如何等待用户进程的系统进程?全部内容,希望文章能够帮你解决如何等待用户进程的系统进程?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)