【问题标题】:Is it possible to build exe on Vista and deploy on XP using py2exe是否可以在 Vista 上构建 exe 并使用 py2exe 在 XP 上部署
【发布时间】:2011-01-08 18:13:56
【问题描述】:

我在 Windows Vista 上使用 python 创建了一些程序。但我想将它部署在 Windows XP 上。是否有必要在 Windows XP 上进行新的构建?或者有可能构建在这两个系统上都可以运行的版本?

编辑(编辑 2 - 非常简单的程序也不起作用): 我的设置:

from distutils.core import setup
import py2exe

setup(console=['orderer.py'])

使用依赖资源管理器我检查了依赖关系是:

msvcr90.dll
kernel32.dll
  +ntdll.dll

几乎解决了:

我发现安装:http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en 可以做到这一点。但是我之前尝试过手动提供msvrc90.dll,但没有成功,有什么办法可以自动重新分配吗?或者我必须把这个安装文件提供给他。

最后也是主要问题

现在我遇到了 msvcrt.dll 的问题。 windows xp 上出现的消息:

过程入口点wcsscpy_s 无法定位到动态 链接库 msvcrt.dll

在 vista 上我的版本是 7.0.6001.18000

但是在 XP 7.0.2600.5512 上

有没有办法解决这个问题?

似乎我没有排除几个dll的......愚蠢的错误:

$ grep -lir msvcrt.dll .
./buildout
./buildtest.py
./dist/ACTIVEDS.dll
./dist/adsldpc.dll
./dist/ATL.DLL
./dist/credui.dll
./dist/DSOUND.dll
./dist/MAPI32.dll
./dist/PROPSYS.dll
./dist/WLDAP32.dll

现在可以了!

【问题讨论】:

    标签: python windows-vista exe py2exe


    【解决方案1】:

    在 py2exe 创建的可执行文件和 msvcr90.dll、msvcp90.dll 和 msvcm90.dll 文件旁边创建一个名为“Microsoft.VC90.CRT.manifest”的文件,其中包含以下内容:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
        <noInheritable/>
        <assemblyIdentity
            type="win32"
            name="Microsoft.VC90.CRT"
            version="9.0.21022.8"
            processorArchitecture="x86"
            publicKeyToken="1fc8b3b9a1e18e3b"
        />
        <file name="msvcr90.dll" />
        <file name="msvcp90.dll" />
        <file name="msvcm90.dll" />
    </assembly>
    

    【讨论】:

    • 创建此文件并添加这些 dll 后,我仍然得到“无法在动态链接库 msvcrt.dll 中找到过程入口点 wcsscpy_s”
    • 您的程序不应依赖于两个 C 运行时库。尝试查找 msvcrt.dll 的依赖项来自何处,例如在您的 *.pyd 和 *.dll 文件上使用 DependencyWalker (dependencywalker.com)。
    • 和winsta.dll,但我没有提供它们中的任何一个......仍在搜索
    • 那个文件是从哪里来的? Ctypes.pyd 通常随 Python 一起提供,并且仅依赖于 msvcr90 (Python >=2.6) 或 msvcr71 (Python 2.5)。
    • 我想我通过删除所有使用 msvcrt.dll 的 dll 解决了这个问题!谢谢你,先生,我将把这个话题多留一天,如果一切都好,我会为你提供赏金。
    【解决方案2】:

    如果你的 vista 系统上有 32 位 python 并使用 py2exe 创建一个 exe,它也应该在 XP 上运行。

    你有遇到什么问题吗?如果有,它们是什么?

    【讨论】:

    • 只有消息:系统无法执行指定的程序。
    • 你能用更多信息更新你的问题吗?就像您用来编译 exe 的 disutils 脚本一样。很可能,您在目标 XP 系统上遗漏了一些您也应该包括在内的 dll。
    猜你喜欢
    • 2021-05-01
    • 2010-10-06
    • 1970-01-01
    • 2010-11-18
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多