出现错误时,VirtualBox startvm 命令总是返回退出代码 0

Posted

技术标签:

【中文标题】出现错误时,VirtualBox startvm 命令总是返回退出代码 0【英文标题】:VirtualBox startvm command always return a exit code 0 when there's an error 【发布时间】:2014-03-21 22:31:20 【问题描述】:

我有一个简单的批处理文件来部署 VM 映像(.ova 文件),然后将其导入 VirtualBox 并启动它。

这是脚本的最后几行:

call "%vboxmanage_exe%"  import "%dest_path%\%latest_vm_filename%" --vsys 0 --vmname %vm_name%
IF %ERRORLEVEL% neq 0 (
  ECHO VM import failed!
  EXIT /b 1
)

call "%vboxmanage_exe%" startvm "%vm_name%" --type headless
IF %ERRORLEVEL% neq 0 (
  ECHO VM start failed!
  EXIT /b 1
)

启动命令实际上是这样的:

VBoxManage.exe startvm "D:\Vms\Latest.ova" --type headless

当已经有一个具有我在命令中指定的名称的 VM 时,会出现错误并且我的脚本会捕获它(回显和退出都执行)。

但是,如果导入成功并尝试启动它,但失败了,则错误不会被捕获并继续... startvm 命令总是返回等于 0 的退出代码?

这是我在尝试启动 VM 时遇到的错误(引入以测试机制)。

VBoxManage.exe: error: Nonexistent host networking interface, name 'Broadcom NetXtreme 57xx Gigabit Controller' (VERR_INTERNAL_ERROR)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Console, interface IConsole

我如何知道启动是否失败,并以适当的错误代码从我的批处理文件中退出。我想我可以检查 VM 状态以查看它是否正在运行(尚未研究这种可能性),但我不希望这样做并从 startvm 命令中获取实际错误。

编辑:我发现唯一相似的是:batch: Exit code for "rd" is 0 on error as well

我尝试了建议的解决方案,但对我不起作用。

【问题讨论】:

这并不能回答你的问题,因为我不认为这是你的问题,但这是一个相关的鲜为人知的事情,应该更广为人知:ERRORLEVEL is not %ERRORLEVEL% 【参考方案1】:

鉴于额外的信息,试试这个:

call "%vboxmanage_exe%" startvm "%vm_name%" --type headless 2>&1 |find "error:" >nul && exit /b 1

假设您提供的错误消息在控制台上,而不是在日志文件中,这需要不同的方法。

【讨论】:

是的,它确实有效。谢谢!但是,有没有办法稍微修改它以在控制台中显示错误?重定向到 find 命令使其不再显示。 (我在查找和退出之间添加了“&& echo VM start failed!”)。 您可以删除>nul,它将打印包含error:的行

以上是关于出现错误时,VirtualBox startvm 命令总是返回退出代码 0的主要内容,如果未能解决你的问题,请参考以下文章

virtualbox卸载出现错误,请高手解决

Docker和K8s实战——安装Centos7时发生VirtualBox运行虚拟电脑时发生严重错误

Docker和K8s实战——安装Centos7时发生VirtualBox运行虚拟电脑时发生严重错误

virtualBox设置共享文件夹时应用程序错误是怎么回事

Docker和K8s实战问题集——安装Centos7时发生VirtualBox运行虚拟电脑时发生严重错误

VirtualBox仅主机以太网适配器驱动程序错误