问题描述
在Jenkins服务器上尝试使用Windows CMD执行一个可执行文件(.exe文件)。在命令行中正常运行时,该应用程序会将进度报告打印到控制台。但是,当从Jenkins运行时,会引发以下异常:
08:13:56 Unhandled Exception: System.IO.IOException: The handle is invalid.
他在探索问题时发现,Jenkins实际上会自动进行stdout重定向,从而引发了这个异常。同时,在命令行中使用stdout重定向(如 C:\> MyApp.exe >> appOut.txt
)时,也会出现相同的错误。他无法访问应用程序的源代码,但知道问题可以从内部解决。他的问题是:是否有办法阻止Jenkins将stdout重定向到文件,或者在执行时进行某种包装,以允许他正常运行应用程序?
解决方案
使用命令行脚本解决问题
在不使用流水线的情况下,你可以通过修改命令行脚本来解决这个问题。以下是一个简单的解决方案:
1. 打开命令行脚本文件,例如 myscript.bat
。
2. 使用 start
命令来运行应用程序,并将stdout重定向到一个文本文件中。你可以使用空的引号作为窗口标题,以便不创建新的窗口。
下面是示例脚本的内容:
@echo off
start "" C:\MyApp\MyApp.exe >> output.txt
这将异步地运行应用程序(即命令行不会等待 MyApp.exe
返回)。如果你希望等待应用程序执行完毕,可以使用 /w
标志,如下所示:
@echo off
start /w "" C:\MyApp\MyApp.exe >> output.txt
通过这种方式,你可以在Jenkins中运行脚本,以确保应用程序能够正常运行且不会引发异常。
注意事项
请注意,这种解决方案依赖于使用命令行脚本进行应用程序的启动。虽然它可以解决stdout重定向引发的异常问题,但在实际应用中可能需要根据你的需求进行调整。确保测试脚本和应用程序的交互,以确保一切正常。
总结
通过修改命令行脚本,你可以解决Jenkins在Windows CMD中使用stdout重定向引发的异常问题。通过使用start
命令来运行应用程序,你可以控制stdout的重定向行为,确保应用程序能够正常运行且不会出现异常。在实际应用中,请根据你的需求进行适当的调整和测试,以确保一切正常。
如有疑问或需要进一步帮助,请随时提问。