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

Apo*_*orv 4 winapi exe

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

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

Cod*_*ray 6

如果在编译完成的程序时切换到"释放"模式(而不是在开发期间用于调试它的"调试"),则应该获得一个可在未安装Visual Studio的计算机上运行的可执行文件.

但是,该可执行文件仍然需要安装适当版本的C运行时库.例如,如果您在Visual C++ 2010中开发它,则需要安装CRT版本10.这是一个可自由再发行的库,可在此处下载.

因此,您有多种部署选项:

  1. 手动部署

    向人们提供裸可执行文件,并将可再发行组件的安装程序包含在安装介质上的另一个文件夹中.如果他们将可执行文件复制到磁盘并且因为收到错误消息而无法运行它们,则应该从包含的可再发行组件安装程序安装CRT库.然后可执行文件将运行正常.

    如果您拥有相对精通计算机的受众,或者您正在部署到固定范围的计算机(如整个学校或公司),这将非常有用.但是对于客户的一般部署而言,它不能很好地工作.

    实际上,您甚至不需要安装程序.您可以将CRT DLL放在与可执行文件相同的文件夹中,它可以正常运行.这就是我测试我在干净的虚拟机上开发的应用程序的方法.它就像一个魅力.根本不需要运行CRT安装程序.您将在Visual Studio安装中找到这些必需的库:

    <Program Files folder>\Microsoft Visual Studio 10.0\VC\redist\x86
    
    Run Code Online (Sandbox Code Playgroud)
  2. 自动部署

    创建一个安装程序,自动安装您的应用程序及其所需的任何依赖项,包括CRT可再发行组件.这就是大多数商业应用程序所做的.除了最琐碎的应用之外,我推荐它.

    完整版的Visual Studio 2010(即非Express版本)可以创建一个安装项目,您可以根据需要进行自定义以作为应用程序的安装程序.但这不再是创建安装程序的推荐方法,并且此功能已从最新版本的Visual Studio,2012中删除.

    因此,即使您有安装项目可用的旧版VS,我建议使用其他内容.没有必要浪费时间创建一些你以后必须更新的东西.我个人最喜欢的创建安装程序的选择是WiXInno Setup.两者都是免费的,在线提供大量文档.

    创建不需要做很多事情的简单设置实际上非常简单 - 这可能是你的情况,因为你需要做的就是安装CRT可再发行组件(如果它还没有).我愿意打赌你可以在WiX或Inno Setup中找到一个演练或在线示例,以了解如何做到这一点.

    如果你需要做更复杂的事情,这两个安装包都支持它.它们具有广泛的可定制性和强大功能,只需要更多的工作就可以完成所有工作.

  3. 静态链接

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

    这种方法的缺点是,从CRT发布的改进,错误修复和安全补丁中受益的唯一方法是重新编译和重新分发您的应用程序.如果您动态链接(默认),您的应用程序将自动受益于已安装的CRT库版本的增强功能.Microsoft强烈建议不要使用静态链接.

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

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

    我的答案中给出了关于这些神秘编译器开关的含义以及您应该使用哪些内容的进一步描述.

最后注意: CRT库的"Debug"版本不是可再发行的,但这并不重要,因为你应该总是分发应用程序的"Release"版本,而不是"Debug"版本.