gpt4 book ai didi

windows - Windows 服务中是否允许 Windows-GUI 调用(创建可见窗口等)?

转载 作者:可可西里 更新时间:2023-11-01 11:55:48 26 4
gpt4 key购买 nike

首先,我知道some proper ways制作真正交互式的 Windows 服务。

情况是,我确实有一个与用户交互的工具。但是,它确实会通过弹出窗口和 Windows 通知区域(又名系统托盘)显示非阻塞通知。它还会写入它显示的通知的日志文件。

此工具通常由主用户应用程序生成,只要主应用程序是普通应用程序,这些通知就会按预期工作。

当此工具由 Windows 服务生成时,自然不会显示任何通知。 (该服务的桌面 session 不可见。)但这没关系,我们有日志文件,这些通知只是 - 通知,用户在任何情况下都绝对不能看到。

现在的问题是:进程是否在服务的上下文中运行(服务本身或它启动的任何进程)“允许”进行显示可见的 Windows API 调用图形界面?

  • 大多数 Windows API 调用(例如创建和显示窗口、使用 Shell_NotifyIcon 等)在服务的不可见 session 中的行为是否相同?
  • 或者我是否必须确保在整个源代码中,在服务的上下文中没有调用 GUI 显示/修改内容?

是的,调用 ::MessageBox是个坏主意,因为它会阻塞。但我可以处理这些电话。

是的,这可以设计得更好,但这是我目前所拥有的,如果我不必拆开整个工具来确保服务中没有运行与 GUI 相关的代码,那就太好了。

最佳答案

来自 Windows 服务的 GUI 元素显示在 session 0 上。在 Windows XP 和 2003 上,允许用户登录到 session 0 并与服务创建的窗口正常交互,但微软在Vista(及更高版本)中的交互式服务 isolating Session 0 .

因此,回答您的具体问题:

Is a process running in the context of a Service (the Service itself or any process it starts) "allowed" to make Windows API calls that display a visible GUI? Will most Windows API calls (e.g. creating and showing a window, using Shell_NotifyIcon, etc.) behave the same in the invisible session of the service?

是的,GUI 调用是允许的,并且应该会正常成功。我所知道的唯一值得注意的异常(exception)是与托盘图标相关的异常(exception),因为提供任务栏的进程 (explorer.exe) 未在隔离的 session 0 中运行。

Or would I have to make sure throughout the source code, that no GUI displaying/modifying stuff is called in the context of the service?

这不是必须的,尽管你应该proceed cautiously with any GUI interaction from your service .彻底测试!

关于windows - Windows 服务中是否允许 Windows-GUI 调用(创建可见窗口等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17364932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com