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

时间:2018-04-25 08:30:45

标签: windows jenkins com rdp

我在Windows 10计算机上运行Jenkins服务器作为服务。在其中一个Jenkins-jobs中,我必须使用COM应用程序执行测试。开发人员在RDP的日常工作中也使用同一台计算机,并且当没有常规开发人员使用它时,Jenkins-job工作在晚上运行。但是,如果没有用户登录计算机或使用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应用程序
  3. 对于 1 ,我会看到以下解决方案以及它们不起作用的原因:

    • Windows启动时自动登录,并保持登录状态:由于我们在日常工作中使用计算机通过RDP,因此无法正常工作,这意味着自我们以来,本地登录用户将被淘汰只允许一次一个会话。
    • 使用RDP登录,然后使用脚本tscon.exe 0 /dest:console退出,这将使会话保持打开状态。由于我们团队中有15人使用该机器而不是RDP,因此无法正常工作,人们将在当天结束时忘记使用此命令。

    对于 2 ,我无法找到办法。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

    mstsc C:\Path\To\saved_rdp_file.rdp

  7. 在Windows Sceduler中创建一个任务,该任务每天晚上调用在步骤5中创建的蝙蝠文件。

  8. 可选:如果要在Jenkins完成后关闭rdp会话,请创建第二个bats脚本并对其进行规划,其中包含:

    tasklist /FI "imagename eq mstsc.exe" | find "mstsc.exe" && taskkill /f /im mstsc.exe || echo process "mstsc.exe" is not running