我正在从批处理文件中运行测试脚本。
因为它是测试,所以程序偶尔会失败。只要返回错误代码就是文件,所以我可以继续并将特定测试标记为失败。
然而,在Microsoft Windows下可执行文件的行为非常烦人 - 如果出现问题,它会弹出如下窗口:
此应用程序无法启动,因为找不到foo.dll,重新安装应用程序可能会解决问题
<OK>
甚至更好:
“......”处的指令以“......”引用内存。
单击“确定”终止程序
单击CANCEL以调试程序
结果已知 - 脚本执行阻止,直到有人按下“确定”按钮。当我们谈论可能在某些无头虚拟机中自动运行的自动脚本时,可能会出现问题。
是否有简单方法来阻止此类行为,只是让应用程序退出失败代码 - 没有更改程序本身的代码?
这有可能吗?
答案 0 :(得分:4)
答案如下:您需要停用WER。
我在http://www.noktec.be/archives/259
找到的最简单的描述简单(ON XP):右键单击“我的电脑”&gt;高级&gt;错误报告&gt;禁用
Voila - 程序无声地崩溃!
当DLL丢失时,这并不能解决问题,但这种情况非常罕见,这对我来说已经足够了。
答案 1 :(得分:2)
您可以通过在调试器下运行应用程序或脚本(脚本引擎,如cscript.exe)来禁止AV等显示对话框。
使用Gflags.exe,或直接修改注册表,并为相关图像设置图像文件执行选项。有关如何使用相应注册表项的详细信息,请参阅此article。您可以使用调试器命令行设置它,例如“C:\ Debuggers \ ntsd.exe -g -G -c'command'”,您可以在其中传递命令以忽略-c“commmand”参数中的某些类型的异常。这将有效地为您提供一个工具来抑制由于AV之类的异常导致的交互式对话,并且会让该过程继续(可能在异常发生后立即结束)。
This文章解释了可用于控制调试器的异常和事件的命令。
-g和-G标志确保进程在进程开始和结束期间不会自动进入调试器。您必须使用各种异常抑制选项,以确保您“吃掉”可能导致进程闯入调试器的所有可能的第一次和第二次机会。
另外,如果你能够容忍一个进程被打入调试器(而不是被卡住显示一个对话框),那么这可能是一个更好的选择。您可以稍后在批处理模式下评估每个调试中断,并确定您需要修复的错误。
答案 2 :(得分:0)
是可能的。我们曾经使用IBM的Rational Robot产品,它可以监视特定项目的屏幕,如果找到,可以向Windows和其他类型的东西发送按键。
我们实际上将它用于全自动单元和系统测试,就像您正在尝试的那样。
现在我认为机器人已经经历了相当多的名称更改,因此可能很难找到there it is,就在IBM的网页上,并为您提供免费下载的试用版。它并不便宜,价格低于5000美元,但它 对我们来说是值得的。
还有TestComplete你可以获得仅用于USD1,000的许可证 - 它宣称“黑盒测试 - 任何Windows应用程序的功能测试”作为其功能之一,并且还有一个可下载的演示版本在购买之前看看它是否合适。
但是,您可以找到其他产品来做同样的事情。
我最初想到的是Expect
,但ActiveState似乎专注于控制台应用程序,这使我相信它可能无法很好地运行图形。
我建议的唯一其他选择是在VBScript中编写自己的程序。我之前已经完成了这项工作,以自动启动许多进程(登录工作VPN,启动邮件,登录等),这样我就可以通过一次鼠标点击完全设置,而不必手动启动所有进程。
您可以使用AppActivate
将窗口移至前台,然后使用SendKeys
向其发送任意按键。如果你想要一个更便宜的解决方案,你可以将这些东西拼凑起来。