RegQueryStringValue不返回MULTI_SZ值

时间:2014-05-27 12:54:35

标签: sql-server installer registry inno-setup

我正在为使用SQL Server的软件开发安装程序,所以我要检查它是否使用下面的代码安装,在Windows 7 x64和Inno Setup 5.5.4上运行(在Ansi和Unicode上进行了测试):

function IsSQLServerInstalled(): Boolean;
var
  version: string;
  instances: String;
  instancesList: TArrayOfString;
  i: Integer;
begin
  if (not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Microsoft SQL Server')) then begin
    Result := False;
  end
  else begin
    RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Microsoft SQL Server', 'InstalledInstances', instances);
    // code goes on...

这里没有一个问题,因为代码编译得很好,但是当我调试时,"实例"变量保持空白,虽然我有这个MULTI_SZ寄存器值包含我机器上安装的实例。它应该返回类似于" INSTANCE1 INSTANCE2"等等,它只给我一个"空白" ''

RegKeyExists函数也可以正常执行,因此正常命中else块。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我必须使用RegQueryMultiStringValue function,它在MULTI_SZ值上正常工作。谢谢大家。