【发布时间】: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#