【发布时间】:2016-03-16 20:50:58
【问题描述】:
在 C++Builder Seattle 10 Update 1 安装结束时,Embarcadero 的主安装程序会启动一个名为 Microsoft Windows 10 SDK Installer 的附加嵌入式安装程序。这是它的样子,以防你忘记了:
然后此安装程序开始安装原始 RTM Windows 10 SDK,如下所示:
为什么 C++Builder 安装它? C++Builder 如何与 SDK 链接——它到底在使用什么?如果我安装更新的 Windows SDK(例如 2015 年 11 月发布的 SDK),它会工作吗? (很难想象如何,因为一切都在 IDE 中设置为使用来自 C:\Program Files (x86)\Embarcadero\Studio\17.0\include\windows\sdk 的文件,并且这些文件包括 Embarcadero 对 SDK 所做的更改,例如特殊的 bcc32 pragma 语句。)
我已经分析了 RAD Studio 的安装文件,试图弄清楚发生了什么,但我没有很好的答案来解释他们为什么要这样做:
- 在您的 RAD Studio ISO 上,检查 7-Zip 中的“\Install\Setup.exe”。
- 有一个
setup.res文件;也可以在 7-Zip 中打开它。 - 在
setup.res中,您将找到上面第一个屏幕截图中看到的MSSDKInstall.exe。在 7-Zip 里面打开它。 - 然后您会看到几个文件:
-
MSSDKInstall.msi:如果你用Orca 打开它,你会看到这是一个非常简单的安装程序,它将一些蓝牙头文件安装到Embarcaderoinclude目录中。 -
OFFLINE目录:包含 MSI 使用的 8 个不同的 Windows SDK 头文件:BluetoothAPIs.h、bluetoothleapis.h、bthdef.h、bthledef.h、bthsdpdef.h、no_sal2.h、winapifamily.h、ws2bth.h。
-
另外,这个单独的安装程序似乎与主 RAD Studio 安装程序冲突。主安装程序也安装这些相同的头文件。然后运行此安装程序,并替换这些文件。然后它以某种未知的原因启动了官方的 Microsoft Windows 10 SDK 安装程序。如果你卸载 Embarcadero SDK 安装包,它会完全删除这 8 个头文件(因此冲突)。
所以:(1) 为什么他们不只在主安装中包含这 8 个头文件 - 这一切有什么意义,(2) 他们为什么启动官方的 Microsoft Windows 10 SDK 安装程序,(3)是否有一些我不知道的集成?
官方文档几乎没用:Installation Notes: Installing the Windows 10 SDK。
RAD Studio Seattle 的安装向导允许您安装 Microsoft Windows 10 SDK,它为 Windows API 添加标头。
注意:Windows 10 SDK 只是 C++Builder 的必要条件 支持直接调用蓝牙和 BluetoothLE Windows API。
但 Microsoft 的 SDK 安装程序不会将标头放入 Embarcadero include 目录。事实上,Embarcadero 通过将文件捆绑在他们自己的安装程序中来做到这一点,如上所示。
【问题讨论】:
-
1) SDK 安装是可选的;配置安装时可以选择不安装。 2) 包含文件不能放入 EMBT 包含文件夹,因为它们是 SDK 的一部分,而不是 BDS。 3) 仅当您计划使用直接调用 BT 和 BTLE WinAPI 调用时才需要安装 SDK(正如您在报价中指出的那样)。 4) EMBT 无法控制 SDK 使用哪个安装程序;安装程序由 MS 提供。使用不同的安装程序违反了 MS 的使用条款。如果它没有按照您想要的方式工作,您需要联系 MS 进行修改。
-
@KenWhite:在#1 中,“SDK 安装”是指 Embarcadero SDK 安装程序,还是微软官方的安装程序?在 #2 上,Embarcadero SDK 安装程序正是这样做的;我通过在安装 MSSDKInstall.exe 设置之前和之后比较 Embarcadero 安装来验证它。
-
#1 是指通过 Rad Studio 安装程序安装 SDK;这是可选的。您可以选择不安装它。如果您选择让 RAD Studio 安装同时安装 SDK,则使用 MS SDK 安装程序来执行此操作。 2) 包含文件没有放入我的 RDS 包含文件夹中; MSSDK 文件夹已添加到 INCLUDE 环境变量中。我的 $(BDSINCLUDE) 文件夹中没有它们。
标签: delphi c++builder delphi-10-seattle