从批处理脚本启动exe并在缺少dll时获取错误代码

时间:2017-06-30 09:23:43

标签: batch-file dll

如果可执行文件在启动时没有丢失dll,我需要自动测试。这种检查是通过Jenkins(持续集成)完成的,它可以执行批处理脚本。

尽管我进行了所有测试,但我无法通过批处理脚本找到启动可执行文件的方法,并在有一个或多个丢失的dll时获取错误代码。

它适用于" CALL myexecutable.exe"当dll丢失时返回不同于0的代码(-1073741515),但显然我需要手动停止程序。

我用命令" START"尝试了很多东西。通过混合几个批处理脚本(一个执行CALL,另一个在几秒钟的睡眠后杀死可执行文件的进程,等等......)但是我找到的唯一方法是在缺少时使代码与0不同dll是" CALL myexecutable.exe" ...

编辑:实际上,为了简化,我搜索一种方法来检测从批处理文件启动的exe在启动时失败(但目前,我还没有找到一种方法来自动关闭程序,因为当缺少dll,出现带有错误消息的对话框)。我不在乎知道涉及哪个dll。在我的情况下,我可以假设如果程序在启动时失败,原因是缺少dll。

有人有意帮助我吗?

1 个答案:

答案 0 :(得分:0)

Dependency Walker将允许间接捕获未解析的DLL。

depends.exe /c /ot:a-ldd.txt a.exe
findstr "Error: " a-ldd.txt > nul && echo unresolved

Windows操作系统似乎在弹出警报之前检查注册表设置。这样就可以阻止整个机器弹出窗口。

reg query HKLM\SYSTEM\CurrentControlSet\Control\Windows
reg add HKLM\SYSTEM\CurrentControlSet\Control\Windows /v ErrorMode /t REG_DWORD /f /d 2

我还没有找到一种方法来禁用每个进程的弹出窗口。 answer to a question on suppressing crash alerts意味着SetErrorMode调用仅影响当前进程(我在调用SetErrorMode(0x8003)失败后从PowerShell脚本启动可执行文件时尝试抑制丢失的DLL警报)。