抑制“程序无法启动,因为 X.dll 丢失”错误弹出窗口

2024-05-13

我有一个Python程序,它使用os.system来执行各种命令。 (它不能使用subprocess因为它必须向后兼容到 Python 2.0。)

在 Windows 上,有时该命令会引用异常目录中的 DLL,因此我会收到臭名昭著的“程序无法启动,因为 X.dll 丢失”错误弹出窗口。

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

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

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


可以通过以下方式禁用调用进程的对话框SetErrorMode http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx。但是,您必须阅读LoadLibrary http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx文档发现“加载时缺少 DLL”属于 所涵盖的“严重错误”之一SEM_FAILCRITICALERRORS.

错误模式会继承到子进程,只要它们不是用CREATE_DEFAULT_ERROR_MODE http://msdn.microsoft.com/en-us/library/windows/desktop/ms684863%28v=vs.85%29.aspx,并且 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 报告详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抑制“程序无法启动,因为 X.dll 丢失”错误弹出窗口 的相关文章

  • 使用 PHP 针对远程证书进行 Windows 应用商店 IAP 签名验证

    我正在尝试验证 Windows 应用商店应用程序的 PHP 中的 IAP 收据 基本上 尝试将此示例代码转换为 PHPhttp msdn microsoft com en us library windows apps jj649137 a
  • 根据另一个数据框中找到的范围填充数据框中的列

    我试图根据该记录的索引值是否落在另一个数据框中的两列定义的范围内来填充数据框中的列 df1 看起来像 a 0 4 1 45 2 7 3 5 4 48 5 44 6 22 7 89 8 45 9 44 10 23 df2 是 START ST
  • 在Python中不断寻找用户输入

    我将如何编写一个始终寻找用户输入的 Python 程序 我想我希望有一个等于输入的变量 然后根据该变量的等于值会发生不同的情况 因此 如果变量是 w 那么它将执行某个命令并继续执行 直到收到另一个输入 例如 d 然后会发生不同的情况 但直到
  • 如何将 Google Cloud Storage 中的许多文件设为私有?

    我进行了很多研究 但无法为此提出解决方案 以下是我用来在 GCP 中公开所有文件的代码 def make blob public bucket name blob name Makes a blob publicly accessible
  • 如何使用 .pth 文件添加 Python 导入路径

    如果我将 pth 文件放入 site packages 中 则会给出一个ImportError 我不知道如何通过创建 pth 文件来导入 指在Python中导入 https stackoverflow com questions 69728
  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • python blpapi安装错误

    我试图根据 README 中的说明为 python 安装 blpapi 3 5 5 但是在运行时 python setup py install 我收到以下错误 running install running build running b
  • 无法使用 Python 循环分页 API 响应

    所以 我对这个感到摸不着头脑 使用 HubSpot 的 API 我需要获取我客户的 门户 帐户 中所有公司的列表 遗憾的是 标准 API 调用一次只能返回 100 家公司 当它返回响应时 它包含两个参数 使分页响应成为可能 其中之一是 ha
  • 如何计算查询集中每个项目的两个字段的总和

    假设我有以下模型结构 class SomeModel Model base price DecimalField commision DecimalField 我不想存储total price在我的数据库中为了数据一致性并希望将其计算为ba
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • 如何在python中访问矩阵每个元素的相邻单元格?

    这里 如果两个单元共享边界 则它们被认为是相邻的 例如 A 5 6 4 2 1 3 7 9 8 这里 索引 0 0 的相邻元素位于索引 0 1 和 1 0 处 索引 1 1 的相邻元素位于索引 0 1 1 0 2 1 处 和 1 2 假设你
  • 使用 conda 安装额外功能

    With pip我们可以使用方括号安装子包 例如与阿帕奇气流 https pythonhosted org airflow installation html pip install airflow all 有类似的东西吗conda或者我必
  • 获取 python 模块的 2 个独立实例

    我正在与以非 OO 方式编写的 python 2 x API 进行交互 它使用模块全局范围来处理一些内部状态驱动的东西 在它不再是单例的情况下需要它 并且修改原始代码 不是我们的 不是一个选择 如果不使用单独解释器的子进程运行 有什么方法可
  • Django INSTALLED_APPS 的命名约定是如何工作的?

    该网站上的教程创建了一个名为 polls 的应用程序 它使用 django 1 9 所以在 INSTALLED APPS 中它是 polls apps PollsConfig 我正在观看一个教程 他将应用程序命名为新闻通讯 并且在 INST
  • datetime strftime 不输出正确的时间戳

    下列 gt gt gt from dateutil parser import parse gt gt gt parse 2013 07 02 00 00 00 0000 datetime datetime 2013 7 2 0 0 tzi
  • 具有行业级约束的 SciPy 投资组合优化

    尝试在这里优化投资组合权重分配 通过限制风险来最大化我的回报函数 我可以毫无问题地通过简单的约束 所有权重之和等于 1 找到产生我的回报函数的优化权重 并做出另一个约束 即我的总风险低于目标风险 我的问题是 如何为每个组添加行业权重界限 我
  • 如何通过 Selenium 内部的文本查找按钮(Python)?

    我有以下三个按钮 我不知道如何获取其中的文本 例如异常值 我试过browser find element by link text Outliers click 但出现 无法找到元素 错误 我该怎么做 See find element by
  • 具有重复值的 Sqlite 列

    就说专栏吧aSQLite 数据库的非常重复 始终有相同的 4 个值 其他值可能稍后出现 但不同值的数量将少于 1000 个 VALUES hello world it s a shame to store this str many tim

随机推荐