如果没有用户登录,则无法通过 Jenkins 运行 COM 应用程序

Unable to run a COM application through Jenkins if no user is logged in

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

The server process could not be started because the configured identity is incorrect. Check the username and password.

我发现问题似乎是 COM 应用程序的身份是从当前交互用户那里获取的,如果有 none,它会失败,请参阅

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 会话安排到第一台计算机吗?

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

我是这样实现的:

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

    mstsc C:\Path\To\saved_rdp_file.rdp

  6. 在 Windows 调度程序中创建一个任务,每晚调用第 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