QProcess 不会在 VBScript 失败时发出 errorOccurred

QProcess won't emit errorOccurred on VBScript failure

我有一个 VB 脚本可以将 Excel 文件转换为制表符分隔的文本文件:

format = -4158

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

oExcel.DisplayAlerts = False
oExcel.ProtectedViewWindows.Open(src_file)
oExcel.ActiveProtectedViewWindow.Edit

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.Worksheets(5).Activate

oBook.SaveAs dest_file, format

oBook.Close False
oExcel.DisplayAlerts = True
oExcel.Quit

在 Qt 中,我使用 wscript 运行 此代码并将信号 QProcess::errorOccurred 连接到 lambda:

QObject::connect(&wscript, &QProcess::errorOccurred, [=](QProcess::ProcessError error)
{

  qDebug() << "Error has occured";

});

在我的 VB 脚本中,受保护的视图已被删除。但是,我修改了脚本,使其不会禁用受保护的视图。这会导致我的脚本无法打开处于受保护视图中的 Excel 文件,从而导致错误提示 Excel 文件无法打开。但是,永远不会发送 errorOccured 信号。为什么会这样?

Process::errorOccured 信号仅在 QProcess 本身有问题或它的进程 运行 崩溃时才会发出(参见 here 的原因)。

如果您希望 VB 脚本以某种方式通知您的应用出现错误,那么您的脚本将必须使用非零退出代码,该退出代码可通过 QProcess::exitCode or, write to its standard error stream which can be caught and read on the QProcess::readyReadStandardError 信号读取.