我需要提取有关 Windows 2003 服务器中系统进程的一些信息(是的,在 2019 年),我用 python 编写了该代码,并使用 auto_py_to_exe
编译它
当我在服务器上运行 .exe
文件时,我收到一条错误消息,指出 “LoadLibrary: 找不到指定的过程。”
引用了 python37.dll
我尝试像一个目录一样编译(包含特定的 dll),我尝试像一个文件一样编译,我得到以下 output .
最佳答案
Python 3.7 和 Win 2003 之间差距太大。正在查看[Python.Wiki]: WindowsCompilers Python 3.7 甚至没有列出(因为它是使用 VStudio 2017 构建的)。那(以及Python本身)将需要/调用Win 2003系统.dll中不存在的函数。
这是一个例子。在下图中,我使用 Dependency Walker 打开了 2 个版本的(2.7 和 3.7)主 .dll :
正如所见,两者都从 kernel32.dll 导入一堆函数。但一个区别是 python37.dll 导入 GetTickCount64。根据[MS.Docs]: GetTickCount64 function ,支持它的最低服务器版本是Win 2008,这意味着它无法在Win 2003中工作.
所以,你必须回到python 2.7(顶部)。几年前,我使用 VStudio 2010 构建了Python 2.7.10,并且它可以在< em>Win 2003(和XP SP 1);这很可能也适用于最新版本(2.7)。
请注意,您还必须安装在脚本中使用的所有软件包(包括 auto-py-to-exe)。
@EDIT0:
我记得(刚刚检查过)我的 XP(SP 3)上有 Python 3.4.3>) PC。因此,Python 3(3.5之前的版本)很有可能也可以在 Win 2003 上运行。
@EDIT1:
最后,我有一些官方声明:关于Python官方页面,将鼠标悬停在“下载”按钮上会产生:
Note that Python 3.5+ cannot be used on Windows XP or earlier.
或者(更清楚):
请注意,这并不一定意味着旧版本一定可以工作。因此,您需要进行一些测试(我建议在目标计算机上安装 Python 和所需的包,并且只有当一切成功时才打包所有内容)。
@EDIT2:
我提到我已经构建了一个Python2.7版本。 psutil 是其中的一部分。
>>> import sys, platform, psutil >>> sys.version, sys.platform ('2.7.10 (default, Mar 8 2016, 15:08:43) [MSC v.1600 32 bit (Intel)]', 'win32') >>> platform.platform() 'Windows-XP-5.1.2600-SP3' >>> psutil.__version__ '3.1.1'
我没有提到我已经从源代码构建了 psutil,但预构建的 .whl 以及 Win 安装程序都可用下载:[PyPI]: psutil 3.1.1 - Download files .
关于python - 加载库: The specified procedure could not be found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188308/