我如何获得Windows 7应用程序以用户从作为本地系统运行的服务中获取

本文关键字:系统 运行 获取 服务 Windows 何获得 应用程序 foo 用户 | 更新日期: 2023-09-27 17:50:30

我创建了一个以本地系统用户身份运行的服务。该服务使用本地互操作和CreateProcessAsUser()方法(以当前登录用户而不是本地系统的身份运行)启动并监视Silverlight out -browser应用程序。我能够获得派生进程的句柄并执行Kill()之类的操作,但是,我已经意识到该服务无法获得子应用程序主窗口的句柄,因为子应用程序作为不同的用户运行。我用的是Windows 7。

我的最终目标是正确地响应Process停止响应(即Process停止响应)。响应== false),这样我就可以终止应用程序并重新启动它。然而,过程。响应需要一个进程主窗口的句柄(process。mainwindowwhandle,准确地说),然而,在这个场景中,Process。MainWindowHandle总是返回0。

我被难住了。在win7中,一个用户是否有办法获得作为另一个用户运行的进程的窗口句柄?

提前感谢所有的帮助。

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

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

更多信息请点击此处:

  • 当Timer事件被触发时,Windows服务如何启动进程?
  • 如何使用c#从Windows服务运行EXE程序?
  • windows服务(允许服务与桌面交互)
  • 需要用不可见的WinForm应用程序替换Windows Service的建议
严格地说,你在第一个位置使用Windows Service是糟糕的设计。它不应该创建或启动任何用户模式进程,或以任何方式与用户交互。请记住,即使没有用户登录,服务也会运行!因此,它们不应该启动应用程序。 一个更好的解决方案是一个简单的后台应用程序,设置为在用户登录时自动启动。然后,这个后台应用程序可以启动Silverlight应用程序,监视其状态,并在必要时与之交互,因为这两个应用程序将在同一个本地用户帐户的上下文中运行。其效果类似于服务,但没有任何隔离的缺点。在Visual Studio中最简单的方法是创建一个WinForms应用程序(或者可能是WPF应用程序,我在这方面的经验较少),简单地不显示任何窗体/窗口。
相关文章: