小编Ric*_* H.的帖子

PyInstaller - DLL加载行为

我正在使用Pyinstaller为用户创建Windows独立应用程序(-onefile选项)(即,没有安装,用户双击应用程序并运行它).它已经完全有效,DLL正在被发现等等.但是,我注意到我的应用程序试图从启动应用程序的文件夹中加载DLL.这是一个安全风险,因为许多用户将从他们的"下载"文件夹运行我的应用程序,因为它是一个独立的可下载文件.

在这些危险位置搜索的DLL是系统DLL,如bcrypt.dll,secur32.dll,iertutil.dll,sspicli.dll等.这些DLL最终在System32文件夹中找到,它只是搜索应用程序从第一个启动的目录.在Pyinstaller创建的特殊_MEIXXXX文件夹中,第一次尝试正确找到特定于Python的DLL和与wxPython相关的DLL.其他系统DLL(如kernel32.dll和user32.dll)立即位于C:\ Windows\System32中

我已经阅读了Windows上的DLL搜索顺序,我怀疑这是因为这些DLL是依赖DLL,因此首先在应用程序启动的目录中搜索.根据PyInstaller如何使用该-onefile选项,似乎AppData中的_MEIXXXX文件夹应该是应用程序的起始目录.但似乎对于这些依赖的DLL,引导加载程序从其开始的目录是应用程序从其开始的目录,并成为DLL的第一个搜索路径.

我试过这些不同的解决方案:

1)SetDefaultDllDirectories- 调用它LOAD_LIBRARY_SEARCH_SYSTEM32似乎没有为我的应用程序加载的DLL加载的依赖DLL做任何事情.

2)应用程序清单与并排程序集 - 这实际上工作,但非常难看,并在所有DLL打包时将我的应用程序大小增加10 MB.它也不可移植,我需要我的应用程序才能运行所有版本的Windows 7及更高版本.绝对宁愿不必这样做.

3)使用App Paths Registry键 - 与1相同,它似乎没有为依赖DLL做任何事情.

我的问题是,是否真的有办法完全控制PyInstaller创建的应用程序的DLL加载行为?并且有没有人成功地这样做而不诉诸清单并将一堆系统DLL与他们的应用程序捆绑在一起?

python windows dll pyinstaller python-2.7

5
推荐指数
0
解决办法
428
查看次数

标签 统计

dll ×1

pyinstaller ×1

python ×1

python-2.7 ×1

windows ×1