我的系统有2个帐户(USER和ADMIN)以及在LocalSystem下运行的服务(Service.exe)。 用户登录USER帐户后,LocalService可以作为ADMIN用户启动进程(CreateProcessAsUser(...))。
服务运行的过程(Tool.exe)是一个遗留的C ++应用程序,它使用CreateWindow(...)执行作业并向用户显示信息,但是当服务启动时,窗口不会显示...
当服务创建流程时,我首先加载配置文件& ADMIN用户的环境,以便使用正确的上下文... (仍然希望Window会显示给USER)
现在,我认为这会导致问题,因为ADMIN正在运行该进程,那么为什么CreateWindow(...)会在USER桌面输出,所以我尝试使用简单的命令行test.exe应用程序作为ADMIN启动命令提示符窗口出现 - 那么为什么在CreateWindow(...)无法正确显示的情况下工作正常呢?
有关如何获取在ADMIN下运行的STATUS(使用Tool.exe中的CreateWindow)以显示在USER登录会话中的任何线索?
我可以以某种方式使用环境,我尝试了下面的想法,它可能会起作用但不会:
startInfo.lpDesktop = @"WinSta0\Default";
startInfo.dwFlags = STARTF_USESHOWWINDOW;
startInfo.wShowWindow = SW_SHOW;
窗口创建如下(在Tool.exe中):
HWND hwnd = CreateWindow
(
"Tool",
"Tool WINDOW",
WS_POPUP | WS_VISIBLE,
0,0,uWidth,uHeight,
NULL,
NULL,
hInstance,
Text
);
lpDesktop是否错误(不确定这是如何工作的)?
我知道这听起来多么疯狂 - 我只是宁愿不必另外发送另一个ToolDisplay.exe作为USER,当Tool.exe用于处理所有内容时,它与作为ADMIN的ADMIN.exe进行通信 - 所以检查看看是否有一些不错的方法来处理这个......
任何帮助将不胜感激...... 谢谢,
[简体问题:]
我的系统有2个帐户(USER和ADMIN),用户始终以USER身份登录,但在某些特定时间,在ADMIN帐户下启动了一个进程(Tool.exe)(使用CreateProcessAsUser(...的LocalSystem服务)。 。)),几乎一切正常,除了进程(Tool.exe)应该使用CreateWindow(...)向用户显示状态这一事实。
当Tool.exe正在运行(作为ADMIN)并且用户以USER身份登录时,窗口未显示(显然)... 有没有办法在ADMIN下向以用户登录的用户显示Tool.exe运行的窗口?
任何帮助将不胜感激...... 谢谢,
答案 0 :(得分:0)
以防您希望服务生成的窗口/ GUI可见, 转到 - >运行提示 - > services.msc - >转到您服务的属性,选中“允许服务与桌面交互”。 然后重新启动您的服务。
请注意,在Vista中,即使在上面,提示也不会显示。这是由于会话问题。但是,有一项服务可以帮助支持服务提示(我认为它是交互式服务检测服务)。