windows - 如果没有用户登录,则无法通过 Jenkins 运行 COM 应用程序
问题描述
我在 Windows 10 计算机上运行 Jenkins 服务器,作为服务。在 Jenkins 工作之一中,我必须使用 COM 应用程序执行测试。开发人员在 RDP 上的日常工作中也使用同一台计算机,并且有问题的 Jenkins 作业在没有常规开发人员使用它的晚上运行。但是,如果没有用户在计算机上登录或使用 RDP,则作业中的脚本无法启动 COM 应用程序并显示以下消息:
由于配置的标识不正确,无法启动服务器进程。检查用户名和密码。
我发现问题似乎是 COM 应用程序的标识取自当前交互用户,如果没有,则失败,请参阅
我似乎无法解决我的问题。我看到两个选项:
- 确保在执行作业时用户已登录
- 弄清楚如何在没有交互式用户的情况下运行 COM 应用程序
对于1,我看到以下解决方案以及它们为什么不起作用:
- Windows 上的自动登录启动并保持登录状态:由于我们在日常工作中通过 RDP 使用计算机,因此无法正常工作,这意味着本地登录用户将被踢出,因为我们一次只允许一个会话。
- 使用 RDP 登录,然后使用脚本退出,
tscon.exe 0 /dest:console
这将使会话保持打开状态。将无法工作,因为我们团队中有 15 人通过 RDP 使用该机器,并且人们在一天结束时登录时会忘记使用此命令。
对于2,我无法找到这样做的方法。
我可以在 Windows 中安排用户在作业开始前自动登录吗?在执行作业之前,我可以使用第二台计算机并将 RDP 会话安排到第一台计算机吗?
解决方案
由于没有人能够提供一个好的解决方案,我将输入我的解决方法作为答案和可能的解决方案。我最终做的是使用第二台计算机(运行 Windows)并在该计算机上安排一个任务,每天晚上(在 Jenkins 作业开始之前)打开一个 RDP 会话到运行 Jenkins 的计算机。这样,Jenkins 作业和 COM 应用程序就有了一个可以使用的活动用户。
这就是我实现这一目标的方式:
- 登录到第二台计算机(即没有运行 Jenkins 的计算机)并打开 RDP(远程桌面连接)对话框并单击显示选项
- 输入第一台计算机的详细信息(即运行 Jenkins 的计算机)。确保取消选中始终要求提供凭据(您需要保存凭据才能自动执行此操作)。
- 将配置保存到 .rdp 文件,使用另存为...
- 重要提示:按连接以连接到第一台计算机,输入密码并确保保存。还接受任何证书等以防止将来出现警告/对话框。
创建一个包含以下内容的bat文件
mstsc C:\Path\To\saved_rdp_file.rdp
在 Windows Sceduler 中创建一个任务,每晚调用在步骤 5 中创建的 bat 文件。
可选:如果要在 Jenkins 完成后关闭 rdp-session,请创建第二个 bats-script 并安排它,其中包含:
tasklist /FI "imagename eq mstsc.exe" | find "mstsc.exe" && taskkill /f /im mstsc.exe || echo process "mstsc.exe" is not running
推荐阅读
- php - Wordpress 主题,使用 Facebook 登录无法在本地主机上运行
- ios - 在 Swift 项目错误中打开 cocoapods
- terminology - “逐字节”的术语,是什么意思?
- javascript - In HTML, is it possible to partially format or
- python - 在 Python 中使用 readline() 读取文件的正确条件
- python - 获取具有最大数字元素的元组,如果出现平局,则随机选择一个平局元组
- ios - Swift - 日期更改时区
- webpack - Webpack 4 ignores UglifyJsPlugin
- excel - Excel VBA Single VS Double Data Type
- javascript - firebase 事务和 if-then-else 行为