gpt4 book ai didi

python - Windows 10 资源管理器文件打开对话框 : filenames disappearing in compiled executable

转载 作者:行者123 更新时间:2023-12-04 08:49:55 24 4
gpt4 key购买 nike

我们在 Windows 10 64 位上使用 Python 2.7 64 位编写了一个相当大的遗留 Python 应用程序 - 在 wxPython 中使用 GUI,通过 NumPy 进行大量数值计算,使用 MatPlotLib 进行 2D 绘图,使用 VTK 进行 3D 绘图等等,我们将其分发为 py2exe 编译的二进制文件在使用 Cython 将我们自己的所有 Python 文件转换为 pyd(Windows dll)之后。
从大约一个月前开始,我们开始在 Windows 上遇到一个非常奇怪的文件打开对话框行为——即当用户要求从磁盘加载模型/文件时出现的对话框。问题是,所有文件名都不见了,我们只能看到文件夹/文件的图标,根本看不到文字。
请看下图:
enter image description here
如您所见,通常包含图标和文件名的中央列表现在只显示图标。恢复文件名的唯一方法是在主窗口中右键单击并选择“刷新” - 尽管有时导航到不同的文件夹会使文件名显示出来。
此行为在使用 Python 代码时不会出现,仅在已编译的应用程序中出现。其他软件不会发生这种情况(Microsoft Office、Notepad++ 或其他任何软件,它们都像我们的应用程序一样使用 native Windows 文件对话框,它们都可以正常工作)。
我已经为此奋斗了好几天,而且由于可执行分发文件夹有数百个 dll 和标准 Python 模块以及包含 Python 标准库以及所有第 3 方库的子文件夹,这并不明显。这些 dll 和 Windows 原生的 dll 之间可能的交互是不可数的。
我们还对 Windows 更新、何时、何地以及如何进行零控制,以及对我们的机器的零访问权限,因为它们被锁定了公司的野兽。
现在,对于问题:

  • 有没有人在应用程序中见过这种行为?如果是,您能否指出一个可能的解决方案?
  • 如果以前没有人见过这个,你知道是否有一种方法可以强制刷新打开的文件对话框,无论是 MFC 命令,还是通过 win32gui 的 Python 命令,系统调用,C黑客,什么?

  • 提前感谢一位令人毛骨悚然的程序员同事。
    编辑
    经过一番痛苦之后,我发现 py2exe 从我的机器中包含了一个 Windows DLL (PROPSYS.dll),它与所有其他机器不兼容(它们具有各种架构)。从构建系统中排除该 DLL 已解决问题。
    感谢@Simon Mourier 提供了查看进程使用的DLL 的宝贵建议。谢谢!!!如果您发表评论作为答案,我会接受它作为解决方案。

    最佳答案

    在 Windows 中,当应用程序以一种奇怪的方式失败时,一个想法是检查该应用程序进程中加载​​的 .dll 是什么,并尝试找出任何看起来很奇怪的东西。
    当您使用 Windows Shell 的通用对话框(打开、另存为)提供程序时尤其如此,因为这样做可能会引入许多第三方 .dll,并在此过程中加载它们。
    最好的检查工具之一是 Process Explorer from Sysinternals.
    这是一个屏幕截图,显示了在标准记事本中打开的外部 .dll,因为我使用了“文件打开”对话框。我们可以看到 Intel 的扩展、Adobe 扩展、OneDrive 等。
    enter image description here
    这不是这里的问题,但它显然有助于发现问题。

    关于python - Windows 10 资源管理器文件打开对话框 : filenames disappearing in compiled executable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64144059/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com