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

以Local System运行的服务调用CreateProcess的默认账户及持久化咨询

刚好对这两块内容比较熟悉,来给你详细解答下:

关于CreateProcess默认使用的账户

当你的服务以Local System身份运行时,调用CreateProcess创建的子进程默认会继承父进程(也就是你的服务)的安全上下文,也就是同样以Local System账户运行。

这点其实在MSDN的CreateProcess文档里是隐含在安全属性相关描述中的:当你传入的lpProcessAttributes参数为NULL时,新进程会沿用调用者(你的服务)的令牌来运行——因为你没有指定其他安全凭据,系统就默认继承父进程的身份。可能你之前没把这部分和“默认账户”直接关联起来~

关于进程持久化是否需要使用CreateService

首先得明确:CreateService是用来注册新的系统服务的API,它的作用是把某个程序纳入服务控制管理器(SCM)的管理体系,不是用来让普通进程保持运行的工具。

针对你“让进程在服务运行期间保持持久化”的需求,分两种场景来看:

  • 如果只是需要这个外部exe在你的主服务运行期间一直存活(比如意外崩溃退出后能自动重启),完全不需要用CreateService。你可以在服务代码里加个简单的监控逻辑:保存CreateProcess返回的进程句柄,定期调用WaitForSingleObject检查进程状态,一旦发现进程已退出,就再次调用CreateProcess重启它就行。
  • 如果你希望这个外部exe本身作为独立服务存在(比如能单独被启动/停止,甚至主服务停了它还能继续运行),那可以考虑把这个exe改写成服务程序(需要处理服务的生命周期命令,比如SERVICE_CONTROL_STOP),然后用CreateService注册它,再由你的主服务通过StartService来启动它。但这种情况需要外部exe本身支持服务模式,不然注册后也无法正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:18