如何将msvcr100.dll链接到cx_freeze程序

7

我有一个Python3的Console类型程序[.py],当我执行它后编译成[exe文件]时,在某些机器上[朋友或亲戚等]会出现缺少msvcr100.dll的错误提示,因此需要我自己去下载这个dll文件[通过google搜索并下载]并将其复制到system32文件夹中。

因此,在查找资料之后,我发现cx_Freezebuild_exe中有一个名为"include_msvcr"的选项,这可能有助于解决这个问题,但是文档不符合我的标准,我无法理解如何操作。

以下是我的setup_console.py代码:

import sys
from cx_Freeze import setup, Executable

base=None
if sys.platform=='win32':
    base="Win32GUI"

setup( name="Rescue Unit",
       version="2.0",
       executables=[Executable("resunitv2.py",base)])

我尝试在Executablebase 参数之后增加 include_msvcr 行,但是会出现 include_msvcr not defined 错误。
顺便说一下,我使用这个GUI编译代码,因为我不希望程序运行时出现控制台窗口[讨厌它] 有人可以给我展示如何做到这一点吗?[也许用一个代码示例]

[cx_Freeze 版本是4.3.3,Python 版本是3.5,Windows 7 SP1 x64]


我需要下载那个 dll 文件并将其复制到 system32 文件夹中。但这不是你应该做的方式。你需要下载 Visual C++ 运行库并安装它:http://www.microsoft.com/en-us/download/details.aspx?id=5555 - stijn
嗯,@stijn,即使是我也知道这一点,但我的程序只依赖于那个dll文件,相信我,它只需要那一个文件。我已经下载了它,将其复制到system32文件夹中,直到现在我从未遇到过任何问题。 - Surya Teja Karra
我并不是说你的方法不可行,而是说这不是正确的分发dll的方式,因为它可能会对其他应用程序或者未来的应用程序造成问题。正确的方式是要么安装redist包,要么将dll放在你的应用程序目录下,但是绝不能放在system32目录下。可以参考http://msdn.microsoft.com/en-us/library/ms235299.aspx和https://dev59.com/d3NA5IYBdhLWcg3wI6V4。 - stijn
1个回答

11

感谢大家的帮助,但我已自行解决。在setup.py文件中应添加include_msvcr选项,如下所示:

import sys

from cx_Freeze import setup, Executable

build_exe_options = {
"include_msvcr": True   #skip error msvcr100.dll missing
}

base=None

if sys.platform=='win32':
base="WIN32GUI"


setup(  name = "AppName",
        version = "1.0",
        description = "blah blah",
        options = {"build_exe": build_exe_options},
        executables = [Executable("appname.py", base=base)])

谢谢,一年后还有效。这是我所需的唯一C++运行时依赖项,使我免于强制客户安装它。 - akagixxer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接