0

我正在尝试从 jenkins 作业运行批处理脚本,该作业有两个 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
)
4

1 回答 1

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. 并且不要在没有的情况下使用EXIT/B因为这总是会退出整个命令过程,而不仅仅是退出当前批处理文件的处理。如果批处理文件包含EXIT without并且此命令在运行批处理文件时真正执行,则在命令提示符窗口中调试批处理文件变得困难,/B因为在这种情况下无法看到运行批处理文件期间输出的错误消息。

于 2016-10-14T05:59:50.117 回答