所以我想创建一个在批处理文件中运行几个命令的Windows服务。
然而,虽然我假设我可以从子进程重定向stdout并读出错误消息,但我似乎无法知道如何将其显示在屏幕上。
启动Windows服务时,它会在服务启动失败时出错,所以理想情况下我只想使用弹出其他服务错误的界面而不是弹出我自己的窗口或编写日志文件
我用它来开始,但它似乎没有任何关于错误处理的东西。
http://www.codeproject.com/Articles/499465/Simple-Windows-Service-in-Cplusplus
他只是输出到调试器。我绝对可以这样做,但理想情况下,启动服务的人会想知道是否有错误开始。
答案 0 :(得分:1)
是的,您可以重定向生成进程的STDOUT。 MSDN有一篇关于该主题的文章:
Creating a Child Process with Redirected Input and Output
您可以使用ReportEvent()
,EventWrite()
或TraceEvent()
将日志消息写入系统事件日志(位于Windows“控制面板”中),具体取决于您使用的日志API决定使用。有关更多详细信息,请参阅MSDN:
服务是后台任务,它不应显示自己的UI。使用系统事件查看器查看日志消息。如果服务无法启动,用户看到的弹出窗口不会由服务本身显示,而是由服务控制管理器显示。
从Windows Vista开始,服务不会与登录用户(会话0隔离)在同一桌面会话中运行,因此他们无法再显示自己的UI。如果您的服务必须显示弹出消息,则可以使用WTSSendMessage()
。对于更复杂的UI,最好将其实现为在用户会话中运行的单独的非服务GUI应用程序,然后该服务可以根据需要启动/与该应用程序通信。