【问题标题】:How to prevent error pop-up message box for failed program (.exe) when running batch file运行批处理文件时如何防止失败程序(.exe)弹出错误消息框
【发布时间】:2011-05-03 00:15:04
【问题描述】:

我正在从批处理文件运行测试脚本。

因为它是测试,程序预计会偶尔失败。只要返回错误代码,它就是文件,因此我可以继续并将特定测试标记为失败。

但是,在 Microsoft Windows 下,可执行文件的行为非常烦人 - 如果出现故障,它会弹出如下窗口:

此应用程序无法启动,因为找不到 foo.dll,重新安装应用程序可能会解决问题

<OK>

甚至更好:

“...”处的指令引用了“...”处的内存..

点击确定终止程序
点击CANCEL调试程序

结果是已知的 - 脚本执行会阻塞,直到有人按下“确定”按钮。而当我们谈到在某些无头虚拟机中可能会在晚上自动运行的自动脚本时,它可能会产生很大的问题。

是否有一种简单的方法来防止此类行为,并让应用程序以失败代码退出 - 而不更改程序本身的代码?

这可能吗?

【问题讨论】:

标签: windows scripting popup


【解决方案1】:

您可以通过在调试器下运行您的应用程序或脚本(脚本引擎,如 cscript.exe)来阻止 AV 等显示对话框。

使用Gflags.exe,或者直接修改注册表,为有问题的镜像设置Image File Execution Options。有关如何使用适当注册表项的详细信息,请参阅此article。您可以使用调试器命令行(如“C:\Debuggers\ntsd.exe -g -G -c'command'”)进行设置,您可以在其中传递命令以忽略 -c“commmand”参数中的某些类型的异常。这将有效地为您提供一个工具来抑制由于异常(如 AV)而导致的交互式对话框,并让进程继续(大概在异常发生后立即结束)。

This 文章解释了可用于控制调试器中的异常和事件的命令。

-g 和 -G 标志确保进程不会分别在进程启动和结束期间自动进入调试器。您必须使用各种异常抑制选项,以确保您“吃掉”所有可能的第一次和第二次机会异常,这些异常可能会导致进程闯入调试器。

此外,如果您可以容忍进程被闯入调试器(而不是卡在显示对话框中),那么总体而言,这可能是一个更好的选择。您可以稍后在批处理模式下评估每个调试中断,并决定您要修复哪些错误。

【讨论】:

    【解决方案2】:

    答案如下:你需要禁用WER

    我在http://www.noktec.be/archives/259找到的最简单的描述

    简单(在 XP 上):右键单击我的电脑 > 高级 > 错误报告 > 禁用

    瞧 - 程序静默崩溃!

    这并不能解决缺少 DLL 时的问题,但这种情况很少见,这对我来说已经足够了。

    【讨论】:

      【解决方案3】:

      可能的。我们曾经使用 IBM 的 Rational Robot 产品,它可以监视屏幕上的特定项目,如果发现,将击键发送到窗口和其他类型的东西。

      我们实际上将它用于完全自动化的单元和系统测试,就像您正在尝试做的那样。

      现在我认为 Robot 已经经历了很多名称更改,因此可能很难找到,但 there it is,就在 IBM 的网页上,并为您提供免费下载试用版。这并不便宜,打卡时间不到 5,000 美元,但 对我们来说是值得的。

      还有TestComplete 只需 1,000 美元即可获得许可证 - 它吹捧“黑盒测试 - 任何 Windows 应用程序的功能测试”作为其功能之一,并且还有一个可下载的演示以查看是否购买前适合。

      但是,您也许可以找到其他产品来做同样的事情。

      我最初想到Expect,但 ActiveState 似乎专注于控制台应用程序,这让我相信它可能无法很好地处理图形。

      我可以建议的唯一其他选择是用 VBScript 编写您自己的程序。我之前已经这样做了,以自动启动许多进程(登录到工作 VPN、启动邮件、登录等),这样我就可以通过单击鼠标进行完全设置,而不必手动启动一切。

      您可以使用AppActivate 将窗口置于前台,然后使用SendKeys 向其发送任意按键。如果您想要更便宜的解决方案,您可以从中拼凑出一些东西。

      【讨论】:

      • 我知道它可能的,因为我知道当我从 Cygwin shell 启动进程时,它不会“弹出”内容,而是默默地死掉。问题是我不想为此目的使用 Cygwin 的外壳。当然是购买对我来说点击的 $XXXX 产品。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2017-05-18
      • 1970-01-01
      • 2016-06-23
      相关资源
      最近更新 更多