繁体   English   中英

如何获取以用户身份运行的Windows 7应用程序的MainWindowHandle <foo> 从作为本地系统运行的服务中?

[英]How can I get the MainWindowHandle of a Windows 7 application running as user <foo> from within a service running as Local System?

我创建了一个以“本地系统”用户身份运行的服务。 此服务使用本机互操作和CreateProcessAsUser()方法启动并监视Silverlight浏览器外应用程序(以当前登录用户(而不是本地系统)的身份运行它)。 我能够在生成的Process上获得一个句柄,并执行类似Kill()的操作,但是,我知道该服务无法获得子应用程序主窗口的句柄,因为子应用程序是以其他用户身份运行。 我在Windows 7上运行。

我的最终目标是对Process停止响应的时间做出正确响应(即Process.Responding == false),以便我可以终止该应用程序并重新启动它。 但是,Process.Responding需要处理主窗口的句柄(确切地说是Process.MainWindowHandle),但是,在这种情况下,Process.MainWindowHandle始终返回0。

我被困在这里。 在Win 7中,一个用户有什么方法可以获取以另一个用户身份运行的进程的窗口句柄?

在此先感谢您提供的所有帮助。

不,那不可能。 出于安全原因,Windows服务与用户模式应用程序完全隔离。 如果您可以获取窗口的句柄,则可以操纵该窗口并与之交互,从而留下一个巨大的安全漏洞。

更多信息请点击这里:

严格地说,你首先使用Windows服务,什么是坏的设计。 它不应该创建或启动任何用户模式的进程,也不应该以任何方式与用户交互。 请记住,即使没有用户登录,服务也会运行! 因此,他们不应该启动应用程序。

更好的解决方案是一个简单的后台应用程序,该后台应用程序设置为在用户登录时自动启动。然后,该后台应用程序可以启动Silverlight应用程序,监视其状态并根据需要与之交互,因为这两个应用程序都将在以下情况下运行:相同的本地用户帐户。 效果类似于服务,但没有隔离的任何缺点。 在Visual Studio中执行此操作的最简单方法是创建一个WinForms应用程序(或者可能是WPF应用程序,我在该领域经验较少),该应用程序根本不显示任何窗体/窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM