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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果没有用户登录,则无法通过Jenkins运行COM应用程序相关的知识,希望对你有一定的参考价值。

我在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应用程序

对于1我看到以下解决方案以及它们不起作用的原因:

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

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

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

答案

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

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

  1. 登录到第二台计算机(即未运行Jenkins的计算机)并打开RDP(远程桌面连接)对话框,然后单击“显示选项”
  2. 输入第一台计算机(即运行Jenkins的计算机)的详细信息。确保取消选中始终要求凭据(您需要保存凭据才能自动执行此操作)。
  3. 使用另存为将配置保存到.rdp文件...
  4. 重要提示:按连接键连接第一台计算机,输入密码并确保保存。也接受任何证书e.t.c.防止未来的警告/对话。
  5. 创建包含以下内容的bat文件 mstsc C:PathTosaved_rdp_file.rdp
  6. 在Windows Scheduler中创建一个任务,每晚调用在步骤5中创建的bat文件。
  7. 可选:如果要在Jenkins完成时关闭rdp-session,请创建第二个bats-script和scedule,其中包含: tasklist /FI "imagename eq mstsc.exe" | find "mstsc.exe" && taskkill /f /im mstsc.exe || echo process "mstsc.exe" is not running

以上是关于如果没有用户登录,则无法通过Jenkins运行COM应用程序的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Jenkins 插件登录到 TFS

如何在Jenkins作业执行中包含域用户

Vue SPA - 检查用户是不是通过身份验证,如果没有则重定向到登录

登录到通过 HTML 框架可见的 Jenkins

除非用户登录,否则钥匙串不会从 Jenkins 脚本解锁

如果通过计划任务调用 BAT 文件,则无法将文件复制到 UNC 目标