【问题标题】:Jenkins: Run Windows batch commands in 32-bit modeJenkins:在 32 位模式下运行 Windows 批处理命令
【发布时间】:2018-05-21 17:14:57
【问题描述】:

使用 Jenkins,我们设置了自动化测试 - 在远程机器上安装应用程序并运行测试用例。此过程使用批处理文件完成。由于它是一个 Windows 应用程序,我必须注销系统(远程机器)以保持会话处于活动状态。为此,我使用了以下脚本:

for /F "skip=1 tokens=3" %%s in ('query user testuser') do 
(C:\Windows\system32\tscon.exe %%s /dest:console )

在远程机器上,当我手动运行这个脚本时,它运行良好。但是当从 Jenkins 运行相同的脚本(批处理文件)时,我收到以下错误:

“查询”不是内部或外部命令、可运行程序或批处理文件。

【问题讨论】:

  • 你的 Jenkins 是 32 位的吗?
  • 我是詹金斯的新手。查找 Jenkins 版本的步骤是什么?

标签: windows batch-file jenkins 32bit-64bit wow64


【解决方案1】:

这是因为您正在从 32 位进程运行 query。在 64 位 Windows 上,32 位进程将放在 File System Redirector

在大多数情况下,只要 32 位应用程序尝试访问 %windir%\System32,访问就会重定向到 %windir%\SysWOW64。对%windir%\lastgood\system32 的访问被重定向到%windir%\lastgood\SysWOW64。对%windir%\regedit.exe 的访问被重定向到%windir%\SysWOW64\regedit.exe

在 64 位 Windows 上 System32 用于 64 位系统工具,而 SysWOW64 用于 32 位系统工具。 query 仅是 64 位的,因此它在 SysWOW64 中不可用,并且不能被 32 位进程看到

C:\>where query
C:\Windows\System32\query.exe

您可以使用 SysWOW64 中的 32 位 cmd 进行检查:

>C:\Windows\SysWOW64\cmd.exe /c query user testuser
'query' is not recognized as an internal or external command,
operable program or batch file.

>C:\Windows\SysWOW64\cmd.exe /c where query
INFO: Could not find files for the given pattern(s).

您需要将query user testuser 更改为%windir%\sysnative\query.exe user testuser。或者更好change to 64-bit Jenkins

【讨论】:

  • 此解决方案在远程桌面机器打开、锁定机器并且测试脚本运行成功的情况下有效。但是当远程桌面机器没有打开时,我面临同样的问题,自动化脚本再次失败。
  • 我不确定您的系统是如何设置的,但很容易检查 query.exe 是在 system32 还是 sysnative 中,并将路径保存到变量然后使用该变量运行
  • 老兄,这太棒了!荣誉@phuclv !!
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多