none
发布使用动态MFC库的执行程序,应随同哪些系统或MFC的DLL? RRS feed

  • 问题

  • 各位好,

    程序开发完成,需要制作发布文件。由于某种原因,项目使用的是动态MFC库和UNICODE无法更改。

    可执行程序需要依赖相应的MFC动态库、还有可能是C语言的动态库。我用dumpbin /DEPENDENTS 查看了程序依赖的动态库,在执行目录复制了如下三个dll,放在exe所在目录。

    mfc140ud.dll/ucrtbased.dll/vcruntime140d.dll

    但是现在的问题是,程序启动即报错,说0x000007的地址无法读取。但是在另外一台安装了VS的机器上程序可以正常运行,因此判断是系统的dll安装不全。

    目标机为仅安装了Win10 的干净的机器。不想安装VS的Redistribution发布包,那样客户安装有些复杂。

    第一个问题,如何在不单独安装VC的Redistribute发布包的情况下,仅复制必要的VC/MFC的dll的方式,实现发布?

    第二个问题,这几个系统dll是否可以改名?改成一个其它的名字,这样用户无法根据dll名字判断出来所用的是MFC实现的。

    第三个问题,目前这些DLL与EXE是在相同目录,能否做到DLL放到EXE所在目录的子目录?

    2017年3月30日 3:26

全部回复

  • 如何在不单独安装VC的Redistribute发布包的情况下,仅复制必要的VC/MFC的dll的方式,实现发布?

    实样比较困难,极度不推荐这样。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年3月30日 4:18
  • Hi BruceLiu_sh,

    感谢在MSDN论坛发帖。

    >>第一个问题,如何在不单独安装VC的Redistribute发布包的情况下,仅复制必要的VC/MFC的dll的方式,实现发布?

    正如Shuanghua Li所说,这是非常复杂的。因为系统DLL之间很多情况下都存在共享关联的情况。

    比如所有MFC DLL都使用共享版本的C运行时库(CRT),您可能还需要重新分配CRT。Visual Studio 2015附带的MFC版本使用通用CRT库现作为Windows 10的一部分分发。默认情况下,存放在C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\ 目录中。如果是Microsoft提供的库文件,还需要查看是否允许重部署。这里有篇文档,关于Microsoft Visual Studio 2015和Microsoft Visual Studio 2015 SDK的可分发代码,你可以参考一下。

    https://www.visualstudio.com/license-terms/distributable-code-microsoft-visual-studio-2015-rc-microsoft-visual-studio-2015-sdk-rc-includes-utilities-buildserver-files/

    >>第二个问题,这几个系统dll是否可以改名?改成一个其它的名字,这样用户无法根据dll名字判断出来所用的是MFC实现的。

    第三个问题,目前这些DLL与EXE是在相同目录,能否做到DLL放到EXE所在目录的子目录?

    名字在我看来是不可以更改的,但是路径可以。

    这里有篇关于部署Visual C++ 文件的文档。你可以参考一下。

    https://msdn.microsoft.com/en-us/library/ms235299.aspx

    希望对你有所帮助。

    Best Regards,
    Sera Yu



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已建议为答案 Baron Bi 2017年4月6日 9:12
    2017年3月30日 6:14
  • 那这样的话,退而求其次,安装Redistritable的话。如何能把Redistributable包的安装放在安装程序中自动完成?

    起码不能让用户再去找Redistributable安装包手动安装。

    2017年3月30日 8:02
  • >>那这样的话,退而求其次,安装Redistritable的话。如何能把Redistributable包的安装放在安装程序中自动完成?

    Visual C ++可再分发软件包安装并注册所有Visual C ++库。 如果您使用它,则必须将其设置为在目标系统上运行,作为安装应用程序的先决条件。 我们建议您为部署使用这些软件包。

    首先使用Setup project创建一个程序安装包。

    https://msdn.microsoft.com/en-us/library/dd293568.aspx

    然后创建一个setup.bat文件。将下面的代码拷贝到里面。

              @echo off  
    vcredist_x86.exe  
    mkdir "C:\Program Files\MyApplication"  
    copy MyApplication.exe "C:\Program Files\MyApplication"  

    最后创建一个自动解压的配置文件。

    具体内容可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/dd293575.aspx

    希望对你有所帮助。

    Best Regards
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已建议为答案 Baron Bi 2017年4月6日 9:11
    2017年3月31日 7:43