英文:
How to send a signal to a running service on Windows and override default handling with c++?
问题
我知道在Windows上信号不存在,但这个词被用来表示没有更好的词汇。
我看过很多类似的帖子,但没有一个提出不涉及第三方软件的解决方案。
我想知道是否有办法使用原生的Windows命令行工具向正在运行的Windows服务发送某种“信号”,并且可以在服务的C++源代码中处理(该源代码是多线程的)。
我已经查看过 SetConsoleCtrlHandler
和 GenerateConsoleCtrlEvent
,但CTRL+Break、CTRL+C等仅在终端中与正在运行的程序进行交互模式时有效。我正在寻找一种方法,可以在一个空白的终端中通过命令发送信号给正在运行的服务。
由于C++的标准信号库不支持多线程,所以无法使用。
英文:
I know signals do not exist on Windows, but the word was used for lack of a better one.
I have seen a lot of similar posts, but none of them propose a solution that does not involve a third party software.
I am curious if there is a way to send some sort of "signal" to a running Windows service with vanilla Windows command line tools, which can be handled in the service's c++ source code (which is multithreaded).
I have looked at SetConsoleCtrlHandler
and GenerateConsoleCtrlEvent
, but the CTRL+Break, CTRL+C, etc. only work in interactive mode with the running program in the terminal. I am looking for something that I can open a blank slate terminal, and send a signal via a command to a running service.
C++'s standard signal library won't work due to it lacking support for multithreading.
答案1
得分: 2
The builtin command-line sc control
可以向服务发送简单的用户定义控制代码。服务的 Handler/Ex
回调可以查找这些代码。
否则,可以让服务创建一个IPC(进程间通信)服务器来监听,比如一个套接字或命名管道。然后,可以让编译的控制台EXE或PowerShell脚本等连接到该服务器,并根据需要向其发送数据。
英文:
The builtin command-line sc control
can send simple user-defined control codes to a service. The service's Handler/Ex
callback can look for those codes.
Otherwise, have the service create an IPC (interprocess communication) server to listen to, such as a socket or named pipe. You can then have a compiled console EXE, or a Powershell script, etc connect to that server and send data to it as needed.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论