我创建了一个以本地系统用户身份运行的服务。该服务使用本地互操作和CreateProcessAsUser()方法(以当前登录用户而不是本地系统的身份运行)启动并监视Silverlight out -browser应用程序。我能够获得派生进程的句柄并执行Kill()之类的操作,但是,我已经意识到该服务无法获得子应用程序主窗口的句柄,因为子应用程序作为不同的用户运行。我用的是Windows 7。
我的最终目标是正确地响应Process停止响应(即Process停止响应)。响应== false),这样我就可以终止应用程序并重新启动它。然而,过程。响应需要一个进程主窗口的句柄(process。mainwindowwhandle,准确地说),然而,在这个场景中,Process。MainWindowHandle总是返回0。
我被难住了。在win7中,一个用户是否有办法获得作为另一个用户运行的进程的窗口句柄?
提前感谢所有的帮助。
不,那不可能。出于安全原因,Windows服务与用户模式应用程序完全隔离。如果你能得到一个窗口的句柄,你就可以操纵或与该窗口交互,从而留下一个巨大的安全漏洞。
更多信息请点击此处:
- 当Timer事件被触发时,Windows服务如何启动进程?
- 如何使用c#从Windows服务运行EXE程序?
- windows服务(允许服务与桌面交互)
- 需要用不可见的WinForm应用程序替换Windows Service的建议