从批处理脚本启动exe并在缺少dll时获取错误代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从批处理脚本启动exe并在缺少dll时获取错误代码相关的知识,希望对你有一定的参考价值。
如果可执行文件在启动时没有丢失dll,我需要自动测试。这种检查是通过Jenkins(持续集成)完成的,它可以执行批处理脚本。
尽管我进行了所有测试,但是如果有一个或多个丢失的dll,我找不到使用批处理脚本启动可执行文件并获取错误代码的方法。
它可以正常使用“CALL myexecutable.exe”,当dll丢失时返回不同于0的代码(-1073741515),但显然,我需要手动停止程序。
我通过混合几个批处理脚本(一个执行CALL,另一个执行可以在几秒钟睡眠后杀死可执行文件的过程,等等)来尝试“START”命令,但是我发现的唯一方法当缺少dll的时候有一个不同于0的代码是“CALL myexecutable.exe”...
编辑:实际上,为了简化,我搜索一种方法来检测从批处理文件启动的exe在启动时失败(但目前,我没有找到一种方法来自动关闭程序,因为当一个DLL丢失时,出现带有错误消息的对话框)。我不在乎知道涉及哪个dll。在我的情况下,我可以假设如果程序在启动时失败,原因是缺少dll。
有人有想法帮助我吗?
Dependency Walker将允许间接捕获未解析的DLL。
depends.exe /c /ot:a-ldd.txt a.exe
findstr "Error: " a-ldd.txt > nul && echo unresolved
Windows操作系统似乎在弹出警报之前检查注册表设置。我想这可以阻止整个机器的弹出窗口。
reg query HKLMSYSTEMCurrentControlSetControlWindows
reg add HKLMSYSTEMCurrentControlSetControlWindows /v ErrorMode /t REG_DWORD /f /d 2
我还没有找到一种方法来禁用每个进程的弹出窗口。 answer to a question on suppressing crash alerts意味着SetErrorMode
调用仅影响当前进程(我在调用SetErrorMode(0x8003)失败后从PowerShell脚本启动可执行文件时尝试抑制丢失的DLL警报)。
以上是关于从批处理脚本启动exe并在缺少dll时获取错误代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 生成的 exe 在其他电脑上创建 dll 错误
解决 php-cgi 启动时提示缺少 msvcr110.dll 的问题