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
信号读取.
我有一个 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
信号读取.