有些洁癖,想要使用旧版 Visual C++,但并不想安装对应的 Visual Studio;我们想要用的只是 Visual C++ 编译器,而 Visual Studio 还包含了其他并不需要的东西,这些不需要的东西对我们来说就是垃圾,还占用空间。

我用的 Visual Studio 2019,希望 Visual C++ 2002 ~ 2019 都可以使用。

以下讲解如何才能做到。

一、制作包含各版 VS 的虚拟机

我们需要从各版本 Visual Studio 中复制所需文件,所以可以先在虚拟机中把各版本 Visual Studio 装好。

因为所有版本 Visual Studio 加起来时间跨度大,所以最好选 Windows 7 64 位。除了 Visual Studio 2002,其他版本正常安装就行。因为,Visual Studio 2002 发行的太早,并不支持 64 位操作系统,安装它需要做些特殊处理。

安装 Visual Studio 2002,先参考《Install .NET Framework 1.0 on 64-bit Windows》安装好 .NET Framework 1.0;再参考《Install Visual Studio .NET 2002 in 64-bit Windows》安装 Visual Studio 2002。

二、提取 Visual C++ 编译器

从虚拟机中复制以下文件及文件夹,要保持原目录结构:

  1. Common7\Tools 下的 ‘VCVarsQueryRegistry.bat’, ‘VsDevCmd.bat’, ‘VsMSBuildCmd.bat’, ‘vsvars32.bat’
  2. Common7\IDE 下的 msobj*、mspdb*
  3. VC 下的 ‘atlmfc’, ‘bin’, ‘include’, ‘crt’, ‘lib’, ‘PlatformSDK’, ‘redist’, ‘vcvarsall.bat’

三、提取 MSBuild

从虚拟机中复制 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0

从 Visual Studio 2012 的安装盘中提取 BuildTools_MSBuild_x86 和 BuildTools_MSBuildResMsi_x86。

四、提取 Windows SDK

从虚拟机中复制 %ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A

Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO) 的 GRMSDKX_EN_DVD.iso 复制 WinSDKBuild_amd64、WinSDKTools_amd64、WinSDKWin32Tools_amd64。

从 Visual Studio 2012 的安装盘中复制 Windows SDK,对应的是 Windows SDK 8.0。

从 Visual Studio 2013 的安装盘中复制 Windows SDK,对应的是 Windows SDK 8.1。

从 Visual Studio 2015 的安装盘中复制packages\Win10_UniversalCRTSDK\10240,对应的是 Windows SDK 10.0.10240.0。

五、制作 v70 ~ v80 Toolset

用 Git 克隆 https://github.com/Georgeto/Daffodil.git,并在 Visual Studio 2010 下进行编译。得到 Daffodil.ENU.msi。

六、制作 VC 运行时库

网上可以下载到的都是 Release 版的运行时库,我们开发还需要 Debug 的运行时库。

在虚拟机上,用 Visual Studio 2012 建一个安装项目,再把 %ProgramFiles(x86)%\Common Files\Merge Modules 中相应的 msm 添加到项目中。但 2002 和 2003 的 Debug 版运行时库并没有在 Merge Modules 中,需要将 %windir%\SysWOW64 下的 *70*d.* 和 *71*d.* 加入到项目。再编译出运行时库安装包。

七、在目标系统上安装 Daffodil 和 VC 运行时库

这个简单,直接安装相应的安装包就行。

八、在目标系统上安装 Windows SDK

  1. 将 Windows SDK v7.1A 所有文件复制到 %ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A
  2. 打开注册表,在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows 下建 v7.1A 键,并建字符串类型的 InstallationFolder,具体值是 Windows SDK v7.1A 安装目录。
  3. 其他的 Windows SDK 安装相应目录下的 msi,其中 MsiVal、Orca 和 Windows App Certification Kit Native Components-x86_en-us 不用安装。

九、安装 MSBuild

  1. 将 v4.0 复制到 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0。
  2. 对里面的 dll 执行 gacutil /i [dll文件] 进行注册。
  3. 我们上面的步骤并没有安装 Windows SDK v7.0A,但 Visual C++ 2010 需要 Windows SDK v7.0,我们可以把目录中 *.v100.props 中的 v7.0A 改成 v7.1。
  4. 在安装从 Visual Studio 2012 安装盘中提取的 BuildTools_MSBuild_x86 和 BuildTools_MSBuildResMsi_x86。

十、安装 Visual C++

  1. 将 Visual C++ 复制到任意目录。
  2. 打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio 下按 Visual C++ 版本建一个键,格式 x.x,例如 2002 对应 7.0,2012 对应 11.0。
  3. 再在下面建一个 Setup 键。
  4. 再在 Setup 下建 VS 键,并建字符串类型 ProductDir 为 Visual C++ 安装目录。
  5. 再在 Setup 下建 VC 键,并建字符串类型 ProductDir 为 Visual C++ 安装目录下的 VC 目录。
  6. 对于 2012 及以上版本,打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing 下按 Visual C++ 版本建一个键,格式 x.x。
  7. 再在下面建一个 professional 键。并建字符串类型 Version 为对应 Visual Studio 的完整版本号,例如 2012 对应 12.0.21005。
  8. 在系统环境变量设置中,建 VS[ToolsetVersion]COMNTOOLS 环境变量,其中 ToolsetVersion 是 Visual C++ 对应 Toolset 的版本。例如 2012 对应 110;但 2002 特殊,ToolsetVersion 设为空。

  1. Install .NET Framework 1.0 on 64-bit Windows
  2. Install Visual Studio .NET 2002 in 64-bit Windows
  3. Installing MSBuild 4.0 without Visual Studio 2010

发表评论

电子邮件地址不会被公开。 必填项已用*标注