gpt4 book ai didi

winapi - 如何将Win32 API应用程序部署为可执行文件

转载 作者:行者123 更新时间:2023-12-04 23:24:09 24 4
gpt4 key购买 nike

如何将Win32应用程序部署为EXE应用程序,以便其他人(未安装VC ++)可以使用它?

我在Windows 7上使用VC ++ 2010。

最佳答案

如果您在编译完成的程序时切换到“发布”模式(而不是在开发过程中用于调试程序的“调试”),则应该获得一个可在未安装Visual Studio的计算机上运行的可执行文件。

但是,该可执行文件仍将需要安装适当版本的C运行时库。例如,如果您在Visual C ++ 2010中开发它,则将需要安装CRT的版本10。这是一个可免费重新分发的库,可下载here

因此,您有几个部署选项:


手动部署

给人们裸露的可执行文件,并将可再发行的安装程序包含在安装介质上的另一个文件夹中。如果他们将可执行文件复制到磁盘并且由于收到错误消息而无法运行,则应从随附的可再发行安装程序中安装CRT库。然后可执行文件将运行正常。

如果您有相对精通计算机的读者,或者您要部署到固定范围的计算机(例如整个学校或公司),这将非常有用。但是,对于一般部署到客户来说,效果并不理想。

实际上,您甚至不需要安装程序。您只需将CRT DLL与可执行文件放在同一文件夹中,它就可以正常运行。这就是我测试在干净VM上开发的应用程序的方式。它像一种魅力。完全不需要运行CRT安装程序。您将在Visual Studio安装中找到这些必需的库:

<Program Files folder>\Microsoft Visual Studio 10.0\VC\redist\x86

自动部署

创建一个安装程序,该程序将自动安装您的应用程序以及所需的任何依赖项,包括可再发行的CRT。这就是您看到的大多数商业应用程序正在做的事情。我建议将其用于除最琐碎的应用之外的任何事情。

完整版本的Visual Studio 2010(即非Express版本)可以创建一个安装项目,您可以根据需要自定义该项目以用作应用程序的安装程序。但这不再是创建安装程序和此功能 has been removed from the latest version of Visual Studio, 2012的推荐方法。

因此,即使您有安装项目可用的VS的较旧版本,我也建议使用其他方法。浪费时间来创建某些东西,您以后只需要更新就没有意义了。我个人最喜欢的用于创建安装程序的选择是 WiXInno Setup。两者都是免费的,并且可以在线获取大量文档。

创建不需要做很多事情的简单设置确实非常简单-对您来说可能就是这种情况,因为您需要做的就是安装CRT可再发行组件(如果尚未安装的话)。我愿意打赌,您可以在WiX或Inno Setup中找到如何进行操作的演练或示例。

如果您需要做更复杂的事情,这两个安装程序包都支持它。它们具有广泛的可定制性,并且功能非常强大,只需花更多的工作就可以完成。
静态链接

如果绝对需要分发一个保证双击即可正常工作的裸可执行文件,则需要将项目切换为在所需的运行时库中进行静态链接。这意味着链接器实际上将所有CRT代码实际上直接嵌入了您的可执行文件中,并且意味着您不必单独重新分发CRT库。

这种方法的缺点是,从CRT发布的改进,错误修复和安全补丁中受益的唯一方法是重新编译和重新分发您的应用程序。如果您动态链接(默认设置),则您的应用将自动受益于CRT库已安装版本的增强。 Microsoft strongly recommends against static linking

要在Visual Studio中的这些模式之间切换,请按照下列步骤操作:


在解决方案资源管理器中右键单击您的项目,然后选择“属性”。
确保在对话框顶部的下拉框中选择“发布”配置。
在TreeView中展开“ C / C ++”项,然后选择“代码生成”。
将“运行库”选项的设置更改为“多线程(/ MT)”。




my answer here中进一步说明了这些隐式编译器开关的含义以及何时使用。


最后说明:CRT库的“调试”版本不可再发行,但这没关系,因为无论如何,您应该始终分发应用程序的“发行”版本,而不要分发“调试”版本。

关于winapi - 如何将Win32 API应用程序部署为可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com