gpt4 book ai didi

C++ 自定义安装程序(启动器)

转载 作者:太空狗 更新时间:2023-10-29 23:15:22 30 4
gpt4 key购买 nike

我用 C# 编写了一个可移植程序,它具有某些依赖项(.NET Framework、Visual C++ 可再发行版等),可以在 Windows XP SP3 及更高版本上运行。

正因为如此,该程序需要一个每次在实际程序运行之前运行的启动器,检查是否安装了所有必需的依赖项。如果缺少任何依赖项,将提供下载和安装该依赖项的选项。如果没有缺少依赖项,则执行实际程序。

启动器本身相对简单,包括一些注册表检查和一些 WinAPI 调用以验证已安装的依赖项。

最后的文件结构是这样的:

C#_compiled_portable_program.exe
C++_compiled_launcher.exe // executes on any system as low as a clean Windows XP SP3 install

问题是我不知道如何在 Visual Studio 2013 中编译 C++ 代码,该代码将以绝对最低限度的依赖项运行(至少在 Windows XP SP3 附带的运行时库上运行)。

以最简单的 C++ 代码为例:

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello world!");
return 0;
}

如果我使用默认配置使用 Visual Studio 2013 编译它,它不会在没有安装 VC++ 2013 的机器上执行,显示一些讨厌的错误。

我四处寻找类似的问题,我能找到的最接近的是 Visual Studio 2010 MSVCR dependency removal? ,但答案不完整或已过时。

那么,就像安装程序一样,是否可以在 Visual Studio 2013 中编译一个几乎可以在任何系统上运行的 C++ 项目?

最佳答案

这并不完美,但现在就可以了。

这就是我做的 C++ 项目,在 Visual Studio 2013 中编译,在没有安装 VC++ 2013 的系统上执行。

我在 Visual Studio 2013 中新建了一个 C++ 项目,File>New>Project>Visual C++>Win32 Console Application

然后在 Solution Explorer 中右键单击该项目并选择 Properties
单击配置下拉菜单并选择所有配置
Configuration Properties>General 中,将 Platform Toolset 设置为 Visual Studio 2013 - Windows XP (v120_xp)

Dependency Walker确定编译后的 exe(发布版本,而不是调试版本)导入了哪些模块。导入的模块应该是:

  • c:\windows\system32\KERNEL32.DLL
  • c:\windows\system32\MSVCR120.DLL

KERNEL32.DLL 是一个系统文件,所以我们不必担心,MSVCR120.DLL 是 Visual C++ 2013 Runtime Library,我们需要将此文件与发布版本一起分发。当可执行文件需要加载模块时,它首先查看该文件的当前位置,然后查看 PATH(System32 等)。如果我们将 MSVCR120.DLL 复制到发布可执行文件所在的同一位置,那么该程序甚至可以在未安装 VC++ 2013 的系统上运行。

由于该项目是一个 32 位应用程序,请下载 VC++ 2013 Redistributable x86 ,将其安装在 32 位版本的 Windows 上(我将其安装在全新的 Windows XP 虚拟机上),然后复制 c:\windows\system32\MSVCR120.DLL

更新:没关系。您不必分发 VC++ 运行时 DLL 文件的拷贝,只需将项目配置为静态链接到运行时库即可。
Here解释了如何去做。如果您计划在 Windows XP 上执行,您仍然需要更改 Platform Toolset

关于C++ 自定义安装程序(启动器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635311/

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