首页 > 解决方案 > 如果没有用户登录,则无法通过 Jenkins 运行 COM 应用程序

问题描述

我在 Windows 10 计算机上运行 Jenkins 服务器,作为服务。在 Jenkins 工作之一中,我必须使用 COM 应用程序执行测试。开发人员在 RDP 上的日常工作中也使用同一台计算机,并且有问题的 Jenkins 作业在没有常规开发人员使用它的晚上运行。但是,如果没有用户在计算机上登录或使用 RDP,则作业中的脚本无法启动 COM 应用程序并显示以下消息:

由于配置的标识不正确,无法启动服务器进程。检查用户名和密码。

我发现问题似乎是 COM 应用程序的标识取自当前交互用户,如果没有,则失败,请参阅

https://support.microsoft.com/en-my/help/305761/com-server-application-that-uses-interactive-user-identity-fails-to-lo

我似乎无法解决我的问题。我看到两个选项:

  1. 确保在执行作业时用户已登录
  2. 弄清楚如何在没有交互式用户的情况下运行 COM 应用程序

对于1,我看到以下解决方案以及它们为什么不起作用:

对于2,我无法找到这样做的方法。

我可以在 Windows 中安排用户在作业开始前自动登录吗?在执行作业之前,我可以使用第二台计算机并将 RDP 会话安排到第一台计算机吗?

标签: windowsjenkinscomrdp

解决方案


由于没有人能够提供一个好的解决方案,我将输入我的解决方法作为答案和可能的解决方案。我最终做的是使用第二台计算机(运行 Windows)并在该计算机上安排一个任务,每天晚上(在 Jenkins 作业开始之前)打开一个 RDP 会话到运行 Jenkins 的计算机。这样,Jenkins 作业和 COM 应用程序就有了一个可以使用的活动用户。

这就是我实现这一目标的方式:

  1. 登录到第二台计算机(即没有运行 Jenkins 的计算机)并打开 RDP(远程桌面连接)对话框并单击显示选项
  2. 输入第一台计算机的详细信息(即运行 Jenkins 的计算机)。确保取消选中始终要求提供凭据(您需要保存凭据才能自动执行此操作)。
  3. 将配置保存到 .rdp 文件,使用另存为...
  4. 重要提示:按连接以连接到第一台计算机,输入密码并确保保存。还接受任何证书等以防止将来出现警告/对话框。
  5. 创建一个包含以下内容的bat文件

    mstsc C:\Path\To\saved_rdp_file.rdp

  6. 在 Windows Sceduler 中创建一个任务,每晚调用在步骤 5 中创建的 bat 文件。

  7. 可选:如果要在 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


推荐阅读