You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C++在Windows系统中创建demon进程

Windows平台C++实现类Daemon后台进程的方案

Windows生态下没有和Linux daemon完全对应的原生机制,生产环境最推荐的实现是Windows服务,它适配系统自带的服务管理框架,支持开机自启、异常自动重启、系统级后台运行,稳定性远高于普通后台进程。如果仅需要简单无窗口后台运行的轻量场景,也可以用脱离会话的独立进程实现,两种方案的实现逻辑如下:

方案1:标准Windows服务实现(推荐)

核心代码逻辑

Windows服务需要遵循系统约定的接口规范,核心逻辑分为三部分:

  • 主程序入口:调用StartServiceCtrlDispatcher绑定服务表,将程序和系统服务管理器关联
  • 服务主函数ServiceMain:是服务的实际运行入口,在这里初始化你的业务逻辑,同时向服务管理器上报服务的运行状态
  • 服务控制回调:注册ServiceCtrlHandler函数,响应系统发来的启动、停止、暂停、恢复等控制指令

服务注册与管理

程序开发完成后,需要用管理员权限执行以下命令完成服务的注册、启停、卸载操作:

  • 注册服务:
    sc create 你的服务内部名 binPath= "C:\完整路径\你的服务程序.exe" start= auto DisplayName= "服务显示名称"
    注意binPath、start等参数的等号后面必须加空格,start= auto表示设置为开机自启
  • 启动服务:sc start 你的服务内部名
  • 停止服务:sc stop 你的服务内部名
  • 卸载服务:sc delete 你的服务内部名

方案2:轻量无窗口后台进程实现

如果不需要系统服务的管理能力,仅需要类似Linux daemon的脱离终端、后台静默运行的效果,可以用以下逻辑实现:

  • 在程序入口调用FreeConsole()释放当前关联的控制台窗口,避免运行时弹出黑框
  • 如果是从终端启动,可创建子进程时传入CREATE_NO_WINDOW标志,之后父进程主动退出,让子进程完全脱离启动会话独立运行
  • 若需要异常自动重启能力,可以额外开发一个轻量监控进程,定期检查目标进程的存活状态,发现进程退出就重新拉起

注意事项

  • Windows服务默认运行在System账户下,和当前登录用户的会话隔离,无法直接弹出UI界面,也无法直接访问当前用户的私有目录、环境变量,如有这类需求需要手动修改服务的运行身份为指定用户
  • 若不想用服务实现开机自启,也可以将程序路径写入注册表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run,但这种方式需要用户登录后才会启动,权限为当前用户权限,稳定性低于系统服务

内容的提问来源于stack exchange,提问作者user2948084

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:24:04