GDI在Windows服务和交互式应用程序中的句柄

问题描述:

我有一个在Winforms应用程序中使用的代码。 Windows服务中也使用相同的代码(作为Windows服务运行的exe)。代码抓住ICON的手柄。但是我发现,在Task Mangaer(和GDI View)中,当我运行Winforms Application时,应用程序显示GDI计数。但是当我通过Windows Service运行代码时,任务管理器中的服务实例没有显示任何GDI计数。那么,这是否意味着Windows Service无法保存GDI句柄?如果是这样,那么代码是如何工作的,那么在Windows服务中,在句柄上运行的代码是如何工作的。GDI在Windows服务和交互式应用程序中的句柄

+0

任务管理器无法检索另一个会话中的进程的GDI计数,因此它将其显示为零。 –

+0

另一个会话是什么意思?服务也使用我的凭据运行。 –

+0

Windows中的每个进程都在特定的“远程桌面会话”中运行,也称为“终端服务会话”,有时也称为“会话”,尽管这可能不明确。请参阅任务管理器中的“会话ID”列。如果两个不同的用户同时登录,它们将处于不同的会话中,并且您会发现每个用户都可以看到他们自己的进程的GDI计数,但不会看到其他用户的GDI计数。 (在Windows 10中,您需要以管理员身份运行任务管理器以查看其他用户的进程。) –

服务实际上能够以与普通应用程序完全相同的方式创建和使用GDI句柄,除了显示表面对用户不可见。

然而,任务管理器只能够查询该are in the same session它在运行这个信息流程和services always run in a separate session.

所以,基本上,只是虚惊一场。 :-)