Windows 10下Jenkins以System运行启动记事本不可见的问题及身份疑问
这是个很典型的Windows会话隔离问题,我来给你拆解清楚:
问题一:Jenkins以System运行时,如何让记事本显示在桌面?
首先得搞懂为什么看不到:从Windows Vista开始,微软引入了会话0隔离机制——System账户运行的服务默认在「会话0」(非交互式的后台会话),而你登录的userA处于另一个「交互式会话」(通常是会话1)。两个会话完全隔离,所以System启动的记事本只会在会话0后台跑,自然不会出现在你的桌面。
有两种靠谱的解决方式:
用PsExec跨会话启动程序
这是最稳妥的方案,步骤如下:- 先获取
userA的会话ID:打开命令提示符,执行query session,找到userA对应的数字ID(比如一般是1)。 - 在Jenkins的构建步骤里执行命令:
这条命令会强制记事本在psexec -i <你的会话ID> -u userA -p <userA的密码> notepad.exeuserA的交互式会话中启动,就能直接在桌面看到了。
- 先获取
尝试修改Jenkins服务的交互权限(Win10可能无效)
Win10默认禁用了服务与桌面交互的选项,但你可以试试:- 打开「服务」管理器,找到Jenkins服务,右键→属性→「登录」选项卡。
- 如果坚持用System账户,勾选「允许服务与桌面交互」——不过这个选项在Win10里大概率因为会话0隔离的限制不生效,所以更推荐第一种方法。
问题二:把Jenkins改成以userA身份运行,记事本会正常显示吗?
绝对可以。当你把Jenkins服务的登录账户改成userA后:
- Jenkins的进程会运行在
userA的安全上下文下,而且只要userA已经登录到Windows桌面(哪怕是锁屏状态),Jenkins启动的程序就会和userA处于同一个交互式会话中,记事本会直接显示在你的桌面,和你手动打开的效果完全一样。
这里有两个小细节要注意:
- 确保
userA有足够权限运行Jenkins服务,比如至少要有本地管理员权限,或者具备启动服务、运行程序的相关权限。 - 如果
userA没有登录Windows,Jenkins启动的程序还是会跑到会话0,同样看不到桌面显示——所以必须保证userA处于登录状态。
内容的提问来源于stack exchange,提问作者techy
相关产品推荐
相关产品推荐

