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

问题描述 投票:1回答:1

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

尽管我进行了所有测试,但是如果有一个或多个丢失的dll,我找不到使用批处理脚本启动可执行文件并获取错误代码的方法。

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

我通过混合几个批处理脚本(一个执行CALL,另一个执行可以在几秒钟睡眠后杀死可执行文件的过程,等等)来尝试“START”命令,但是我发现的唯一方法当缺少dll的时候有一个不同于0的代码是“CALL myexecutable.exe”...

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

有人有想法帮助我吗?

batch-file dll
1个回答
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警报)。

© www.soinside.com 2019 - 2024. All rights reserved.