![jenkins/hudson:当从属作为 Windows 服务运行时,批处理 CMD 窗口不可见](https://linux22.com/image/1312309/jenkins%2Fhudson%EF%BC%9A%E5%BD%93%E4%BB%8E%E5%B1%9E%E4%BD%9C%E4%B8%BA%20Windows%20%E6%9C%8D%E5%8A%A1%E8%BF%90%E8%A1%8C%E6%97%B6%EF%BC%8C%E6%89%B9%E5%A4%84%E7%90%86%20CMD%20%E7%AA%97%E5%8F%A3%E4%B8%8D%E5%8F%AF%E8%A7%81.png)
我将 Jenkins 从属服务器作为 Windows 服务运行,然后它将启动一系列调用(例如):
Slave.exe->ant->cmd批处理->notepad.exe
问题是“notepad.exe”不可见,我可以在任务管理器中看到它,但它没有显示其 UI。
windows平台是win server 2008,我配置了服务“以本地系统帐户登录”,并勾选了“允许服务与桌面交互”。
对此有什么想法吗?非常感谢
答案1
从 Windows Vista 开始,所有服务都在单独的会话(会话 0)中运行,并且通常无法直接与用户交互,即使设置了“允许服务与桌面交互”。换句话说,您不应该这样做。您不能在登录会话中运行 slave.exe 吗?
但是,作为向后兼容性缓解措施,Windows 应该检测到服务已显示用户界面并主动向您显示(在单独的桌面上)。我不确定为什么这不起作用。服务是否配置为以本地系统身份运行?
答案2
我在尝试启动一些自动脚本 Web 测试脚本(需要 GUI)时遇到了类似的问题。
这是诀窍。您需要启动远程桌面连接,将其设置为在连接启动后启动 .exe,输入并保存身份验证信息,然后将连接保存到磁盘。
让 jenkins 启动已保存的 RDP 连接,它会为您启动一个 GUI。
此外,如果您在 jenkins 中运行多个 Windows 命令,则需要将每个命令作为单独的项目(如果它们返回退出代码...就像您正在调用两个 .bat 文件或类似的东西)