【问题标题】:CreateProcessAsUser() not showing CreateWindow of running Process [C#]CreateProcessAsUser() 不显示正在运行的进程的 CreateWindow [C#]
【发布时间】:2009-09-20 03:43:33
【问题描述】:

我的系统有 2 个帐户(USER 和 ADMIN)和一个在 LocalSystem 下运行的服务 (Service.exe)。 用户登录到 USER 帐户,LocalService 可以以 ADMIN 用户身份启动进程 (CreateProcessAsUser(...))。

Service 运行的进程 (Tool.exe) 是一个旧版 C++ 应用程序,它执行一项作业并使用 CreateWindow(...) 向用户显示信息,但是当 Service 启动它时,窗口不显示...

当服务创建进程时,我首先加载 ADMIN 用户的配置文件和环境,以便使用正确的上下文... (仍然希望窗口会显示给用户)

现在,最初我认为这会导致问题,因为 ADMIN 正在运行该进程,那么为什么 CreateWindow(...) 会在 USER 桌面中输出,所以我尝试了一个简单的命令行 test.exe 应用程序以及何时以 ADMIN 身份启动时,出现了命令提示符窗口 - 那么为什么在 CreateWindow(...) 无法正确显示的情况下它可以正常工作?

关于如何让在 ADMIN 下运行的 STATUS(使用 Tool.exe 中的 CreateWindow)以显示在 USER 登录会话中的任何线索?

我可以以某种方式使用 ENVIRONMENT,我尝试了以下方法,认为它可能有效但没有:

startInfo.lpDesktop = @"WinSta0\Default";
startInfo.dwFlags = STARTF_USESHOWWINDOW;
startInfo.wShowWindow = SW_SHOW;

Window 创建如下(在 Tool.exe 中):

HWND hwnd = CreateWindow
(
    "Tool", 
    "Tool WINDOW",
    WS_POPUP | WS_VISIBLE,
    0,0,uWidth,uHeight,
    NULL, 
    NULL, 
    hInstance, 
    Text
);

lpDesktop 错了吗(不完全确定它是如何工作的)?

我知道这听起来有多疯狂——我只是不想以 USER 身份启动另一个 ToolDisplay.exe,它与 Tool.exe 作为 ADMIN 进行通信,而 Tool.exe 过去常常自己处理所有事情——所以检查一下看看有没有什么好的方法来处理这个...

任何帮助将不胜感激... 谢谢,

[简化问题:]

我的系统有 2 个帐户(USER 和 ADMIN),用户始终以 USER 身份登录,但在某些特定时间,会在 ADMIN 帐户下启动进程 (Tool.exe)(由 LocalSystem 服务使用 CreateProcessAsUser(.. .)),除了进程 (Tool.exe) 应该使用 CreateWindow(...) 向用户显示状态这一事实之外,几乎一切正常。

当 Tool.exe 正在运行(以 ADMIN 身份)并且用户以 USER 身份登录时,不会显示窗口(显然)... 有没有办法将在 ADMIN 下运行的 Tool.exe 的窗口显示给以 USER 身份登录的用户?

任何帮助将不胜感激... 谢谢,

【问题讨论】:

  • 简化您的问题。这没有任何意义。

标签: c#


【解决方案1】:

以防万一您希望服务生成的窗口/GUI可见, 转到-> 运行提示-> services.msc -> 转到您的服务属性,选中“允许服务与桌面交互”。 然后重启你的服务。

请注意,在 Vista 中,即使在上面之后,提示也将不可见。这是由于会话问题。但是有一项服务可以帮助支持来自服务的提示(我认为它是交互式服务检测服务)。

【讨论】:

  • 对。请注意潜在的安全风险,因为这可能会导致 LSA 帐户被“劫持”。也许您可以在“普通”帐户下运行该服务。
  • 服务必须在 ADMIN 帐户下运行,因为它执行管理操作。并且只有 USER 曾经登录过。该服务不是执行 CreateWindow 的服务,在 ADMIN 中运行的 Tool.exe 是......所以“允许服务与桌面交互”没有帮助(已经完成)......
  • 为什么要以管理员身份运行 tool.exe?如果您只需要管理权限,则服务拥有比管理员用户更多的权限。所以直接使用服务生成 tool.exe(不要执行 runas Admin)。还可以尝试通过服务生成测试应用,看看它是否有效。
猜你喜欢
  • 2023-04-08
  • 2016-11-09
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
相关资源
最近更新 更多