如何在 Inno Setup 中正确检查我的机器上安装了哪个 MS SQL 服务器版本?

How to properly check in Inno Setup which MS SQL Server version is installed on my machine?

我使用的是 64 位安装模式,我必须检查我的机器上安装了从 MS SQL 2005 开始的哪个版本的 MS SQL。 我可以这样做:

if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Microsoft SQL Server\XXX\Tools\ClientSetup\CurrentVersion', 'CurrentVersion', RegValue) then
  SQLVERSIONINSTALLED := RegValue;

其中 XXX 对于不同版本的 MS 是不同的 SQL。 在 64 位安装模式下,HKLM 默认与注册表的 64 位视图相关。对于低于 2016 的版本,我是否必须使用 HKLMHKLM32 检查注册表视图?最安全、最有效的方法是什么?

我没有发现读取版本两次(对于 32/64 位)有任何性能问题。 也许您可以将版本放在一个数组中并循环执行检查:

var
sqlKeys: array of string;

  sqlKeys := ['15.0', '16.0', '17.0'];

  for I := low(sqlKeys) to high(sqlKeys) do
  begin
    if RegQueryStringValue(HKLM32, 'SOFTWARE\Microsoft\Microsoft SQL Server\' + sqlKeys[I] + '\Tools\ClientSetup\CurrentVersion', 'CurrentVersion', RegValue) then
      SQLVERSIONINSTALLED := RegValue;

    if RegQueryStringValue(HKLM64, 'SOFTWARE\Microsoft\Microsoft SQL Server\' + sqlKeys[I] + '\Tools\ClientSetup\CurrentVersion', 'CurrentVersion', RegValue) then
      SQLVERSIONINSTALLED := RegValue;
  end

使用怎么样 SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\MSSQLServer\CurrentVersion ? 我相信它在 XP、Win8 和 Win10