如何在windows服务中显示启动错误消息

how to display startup error message in windows service?

本文关键字:显示 启动 错误 消息 服务 windows      更新时间:2023-10-16

所以我想创建一个在批处理文件中运行一些命令的windows服务。

然而,虽然我认为我可以从子流程重定向stdout并读取错误消息,但我似乎不知道如何将其显示在屏幕上。

当启动windows服务时,当服务无法启动时,它会出现错误,所以理想情况下,我只想使用弹出其他服务错误的界面,而不是弹出自己的某个窗口或编写日志文件。

我用这个开始,但它似乎没有任何关于错误处理的内容。

http://www.codeproject.com/Articles/499465/Simple-Windows-Service-in-Cplusplus

他只是向调试器输出。我当然可以做到,但理想情况下,启动服务的人会想知道启动时是否有错误。

是的,您可以重定向派生进程的STDOUT。MSDN有一篇关于这个主题的文章:

创建具有重定向输入和输出的子进程

您可以使用ReportEvent()EventWrite()TraceEvent()将日志消息写入系统事件日志(位于Windows的"控制面板"中),具体取决于您决定使用哪种日志API。有关更多详细信息,请参阅MSDN:

事件日志

Windows事件日志

服务是一个后台任务,它不应该显示自己的UI。使用系统事件查看器查看日志消息。如果服务无法启动,用户看到的弹出窗口不是由服务本身显示的,而是由服务控制管理器显示的。

从Windows Vista开始,服务不会与登录用户在同一个桌面会话中运行(会话0隔离),因此它们无法再显示自己的UI。如果您的服务必须显示弹出消息,则可以使用WTSSendMessage()。对于更复杂的UI,最好将其实现为在用户会话中运行的单独的非服务GUI应用程序,然后服务可以根据需要启动该应用程序/与该应用程序通信。