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

如何在以服务运行的Windows自托管Runner中启动UI应用?

问题:Windows自托管Runner以服务运行时无法显示UI应用界面

我有一台Windows自托管Runner,通过工作流启动记事本。当GitHub Runner以service方式运行时,执行工作流后,记事本进程在任务管理器中可见,但桌面无法显示其UI;而通过运行run.cmd启动GitHub Runner时,执行相同工作流可在桌面看到记事本UI。

针对GitHub服务已尝试的操作:

  • 将服务登录账户改为当前用户,仍无法启动UI
  • 尝试使用本地系统账户,并允许服务桌面交互,依旧无效

请问当GitHub Runner以服务激活时,是否有办法启动UI应用?


解决方案

当GitHub Runner以服务模式运行时,默认处于会话0隔离环境,这个环境和当前用户的交互式桌面会话(通常是会话1及以上)相互独立,这就是即便开启服务桌面交互也无法显示UI的核心原因。可以通过以下两种方式解决:

  1. 借助PsExec工具将UI程序启动到用户会话

    • 先通过命令query session获取当前登录用户的会话ID(比如输出中对应用户名的Session列数值)。
    • 在工作流步骤中调用PsExec命令,指定会话ID启动UI程序,示例命令:
      psexec.exe -i <你的会话ID> -u <当前用户名> -p <用户密码> notepad.exe
      
    • 注意:需要提前将PsExec工具放置在Runner可访问的路径,或添加到系统环境变量中。
  2. 改用交互式会话启动Runner

    • 放弃服务模式,创建一个包含run.cmd启动命令的批处理脚本,将其放入用户启动文件夹(路径:C:\Users\<你的用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup),让Runner随用户登录以交互式会话启动,这样工作流启动的UI程序会直接显示在用户桌面。
    • 如果一定要保留服务模式,可基于Windows的CreateProcessAsUser API编写工具,实现将UI程序启动到指定用户会话,不过这需要具备一定的Windows开发能力。

补充说明:你之前尝试的修改服务登录账户、允许桌面交互无效,是因为服务即使用当前用户账户运行,仍处于会话0,和用户桌面所在的会话不互通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:32:13