python – 禁止“程序无法启动因为X.dll丢失”错误d出窗口

python – 禁止“程序无法启动因为X.dll丢失”错误d出窗口,第1张

概述我有一个 Python程序,它使用os.system来执行各种命令. (它不能使用子进程,因为它必须向后兼容到Python 2.0.) 在Windows上,有时命令引用异常目录中的DLL,因此我得到臭名昭着的“程序无法启动因为X.dll缺失”错误d出. 我的问题不是关于如何让命令找到它的所有DLL.我已经知道该怎么做了.我想知道的是,当DLL丢失时,如何告诉Windows不显示此对话框?相反,子进 我有一个 Python程序,它使用os.system来执行各种命令. (它不能使用子进程,因为它必须向后兼容到Python 2.0.)

在windows上,有时命令引用异常目录中的DLL,因此我得到臭名昭着的“程序无法启动因为X.dll缺失”错误d出.

我的问题不是关于如何让命令找到它的所有DLL.我已经知道该怎么做了.我想知道的是,当DLL丢失时,如何告诉windows不显示此对话框?相反,子进程应该将错误消息打印到stderr(已被重定向到os.system调用中的文件)并退出失败(导致os.system返回错误代码).这样我的程序就可以捕获错误并以自己的方式报告,而不是挂起,直到有人来点击确定.

MSDN通常是我的朋友,但这次我得到的建议是如何处理特定缺失的DLL,这很好,但这次不是我需要的.

重申一下,这是一种极端向后兼容的情况:我需要一个适用于Python 2.7或任何旧版本的解决方案,直到2.0.它还需要适用于所有仍然流行的windows版本(XP,Vista,7,8).使用更旧的windows是非常理想的,但不是100%要求.此外,不能选择使用任何其他语言编写的第三方模块和帮助程序. (我想.BAT文件可以,如果这是唯一的方法.)

解决方法 可以使用 SetErrorMode禁用调用进程的对话框.但是,您必须阅读 LoadLibrary文档以发现“加载时丢失的DLL”符合SEM_FAILCRITICALERRORS所涵盖的“严重错误”之一.

错误模式继承到子进程,只要它们不是用CREATE_DEFAULT_ERROR_MODE创建的,并且看起来CMD.EXE在创建子进程时不设置该标志.因此,在我的Python脚本中启动时设置错误模式确实会在我关心的情况下抑制对话框…

if sys.platform == 'win32':    try:        import ctypes        # SEM_FAILCRITICALERRORS|SEM_NOGPFAulTERRORBox|SEM_NOOPENfileERRORBox        ctypes.windll.kernel32.SetErrorMode(0x0001|0x0002|0x8000)    except:        pass

这不是一个最佳的解决方案:子进程终止于一个特定的错误代码(0xC0000135 – 实际上没有记录为“丢失的DLL”,但显然是从搜索该数字时出现的情况),但细节 – 如缺少哪个DLL – 被丢弃在地板上.我仍然希望找到一个让装载机向stderr报告详细信息的设置.

总结

以上是内存溢出为你收集整理的python – 禁止“程序无法启动因为X.dll丢失”错误d出窗口全部内容,希望文章能够帮你解决python – 禁止“程序无法启动因为X.dll丢失”错误d出窗口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存