使用两个msiexec命令运行批处理脚本会在完成第一个命令后

时间:2016-10-13 18:05:52

标签: windows git batch-file jenkins spawning

我正在尝试从jenkins job运行批处理脚本,该脚本有两个msiexec命令,一个用于卸载,另一个用于安装。
这个脚本在github上,所以jenkins工作克隆了repo,然后运行脚本

Jenkins作业开始执行第二个msiexec(安装)命令,但它立即结束。如果我打开作业控制台,我可以看到消息"处理泄露的文件描述符。"和工作状态:成功


如果我通过没有jenkins的cmd运行相同的脚本,它工作正常。

setlocal enabledelayedexpansion 
IF EXIST "directory path" (
msiexec /uninstall {Product ID} /qb
)
pushd \\shared drive
IF EXIST "directory path" (
msiexec /i "path to exefile" /qb
popd
exit 0
)
ELSE (
ECHO Setup Not Found in current
exit 0
)

1 个答案:

答案 0 :(得分:0)

关键字 ELSE 必须与 IF 条件的TRUE分支的)位于同一行,该条件与)之间用空格字符分隔。单独行上的 ELSE 被解释为要运行的控制台应用程序的名称。

if exist "directory path" (
    %SystemRoot%\System32\msiexec.exe /uninstall {Product ID} /qb
)
pushd "\\ComputerName\ShareName\"
if exist "directory path" (
    %SystemRoot%\System32\msiexec.exe /i "path to exefile" /qb
) else (
    echo Setup not found in %CD%.
)
popd
exit /B 0

提示:对于调试批处理文件,在命令提示符窗口中运行它,而不是在删除或注释包含echo off的所有行后双击它。并且不使用退出而不使用/B,因为这会导致退出整个命令进程,而不仅仅是退出当前批处理文件的处理。如果批处理文件包含 EXIT 而没有/B,则在命令提示符窗口中调试批处理文件变得很困难,并且在运行批处理文件时实际执行此命令,因为在运行批处理文件期间输出错误消息在这种情况下无法看到。