2009-09-20 102 views
0

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

服务运行的进程(Tool.exe)是一个传统的C++应用程序,它执行作业并使用CreateWindow(...)向用户显示信息,但当通过服务启动它时,窗口不会显示...

当通过服务创造的过程中,我第一次加载配置文件ADMIN用户的&环境,以便正确的上下文中使用... (仍然希望窗口将显示到用户)

现在,最初我以为这会导致一个问题,因为管理员正在运行的过程,为什么CreateWindow(...)输出在USER桌面,所以我尝试通过一个简单的命令行test.exe应用程序,当以ADMIN的身份启动时,命令提示符窗口出现 - 那么为什么它能正常工作,因为CreateWindow(...)无法正确显示?

有关如何获取在ADMIN下运行以显示在USER登录会话中的状态(使用Tool.exe中的CreateWindow)的任何线索?

我可以使用环境弄好了,我想下面想这可能工作,但没有:

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作为显示器,当Tool.exe用于处理所有内容时 - 所以检查,看看是否有没有处理一些这方面的好方法...

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

[简体问:]

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

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

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

+0

简化您的问题。这没有任何意义。 – 2009-09-20 04:28:14

回答

0

以防万一你想通过服务催生了一个窗口/ GUI可见, 转到TO->提示符下运行 - > SERVICES.MSC - >转到您的服务的属性,选中“允许服务与桌面交互”。 然后重新启动您的服务。

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

+1

对。请注意潜在的安全风险,因为这可能会使LSA帐户“高枕无忧”。也许你可以在“正常”帐户下运行该服务。 – mjv 2009-09-20 04:42:20

+0

服务必须在执行管理员操作时在ADMIN帐户下运行。并且只有USER有登录。 该服务不是执行CreateWindow的人,在ADMIN中运行的Tool.exe是...所以“允许服务与桌面交互”不会帮助(已完成)... – Shaitan00 2009-09-20 05:20:52

+0

为什么要跑马tool.exe作为管理员?如果你只是需要管理权限,服务拥有更多的管理用户权限。所以直接使用服务产生tool.exe(不要做runas Admin)。 也尝试通过服务产卵测试应用程序,看看它是否工作。 – 2009-09-20 08:11:52