CreateProcessAsUser()没有显示运行Process [C#]的CreateWindow

时间:2009-09-20 03:43:34

标签: c#

我的系统有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运行的窗口?

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

1 个答案:

答案 0 :(得分:0)

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

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