Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在delphi中查找firebird是否安装以及安装在何处_Windows_Delphi_Search_Path_Registry - Fatal编程技术网

Windows 如何在delphi中查找firebird是否安装以及安装在何处

Windows 如何在delphi中查找firebird是否安装以及安装在何处,windows,delphi,search,path,registry,Windows,Delphi,Search,Path,Registry,问题:我需要修改firebird中的alias.conf,但是。。正如我们所知,用户可以在任何地方安装firebird。所以我需要通过编程找到firebird的安装位置。我尝试通过注册表来实现这一点,但这不是一个好主意,因为几乎每一个新版本的windows(2000、XP、VISTA、7、8和32位或64位,可能是128位)的注册表项都会发生变化。我还尝试找出搜索注册表的过程,比如简单的文本文件,但没有结果。我试图找到“HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow643

问题:我需要修改firebird中的alias.conf,但是。。正如我们所知,用户可以在任何地方安装firebird。所以我需要通过编程找到firebird的安装位置。我尝试通过注册表来实现这一点,但这不是一个好主意,因为几乎每一个新版本的windows(2000、XP、VISTA、7、8和32位或64位,可能是128位)的注册表项都会发生变化。我还尝试找出搜索注册表的过程,比如简单的文本文件,但没有结果。我试图找到“HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Shareddls\Alias.conf”,但这不是一种简单的方法。可能问题不在Lazarus中的注册表函数中,但我不知道这一点。所以,可能有人知道如何检查firebird是否安装在哪里。简单地说:我将使用数据库文件安装我的应用程序,并且必须以静默方式修改aliases.conf

通过检查注册表项
HKLM\Software\Firebird Project\Firebird Server\Instances
并读取
DefaultInstance
值,可以找到Firebird的安装位置

下面的代码应该可以做到这一点:-

var
  lReg : TRegistry;
  lStr : String;
begin
  lReg := TRegistry.Create;
  Try
    lReg.RootKey := HKEY_LOCAL_MACHINE;
    If lReg.OpenKey('Software\Firebird Project\Firebird Server\Instances', False) Then
      lStr := lReg.ReadString('DefaultInstance');
    lReg.CloseKey;
    ShowMessage(lStr);
  Finally
    FreeAndNil(lReg);
  End;

Andy_D我已使用此功能,但无法工作。函数TfrMain.GetSubKeys(ARegStr:string;var SubKeys:TStringList):布尔;var Reg:树木学;开始子键:=nil;Reg:=TRegistry.create;尝试使用Reg.OpenKey(ARegStr,false),然后开始子键:=TStringList.Create;注册GetKeyNames(子键);注册关闭键;结束;最后注册免费;结束;结果:=子键为零;结束;你得到了什么结果?您的电脑上是否安装了Firebird?您是否使用RegEdit检查了注册表值?您的注册表功能不起作用。我已经用一个功能更新了我的答案,这个功能可以在3台安装了Firebird的机器上完美运行。在regedt中,我没有那个键。我只找到了HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs\aliases.conf,但正如您所知,如果其他计算机使用其他愚蠢的Windows,则此密钥将无法工作。如果我可以只使用密钥的部分名称(例如“alias.conf”)来搜索密钥,那就太好了。是的,是的,我已经安装了Firebird。结果是零。放弃它,询问用户。Firebird可能未在本地安装。更糟糕的是,可能存在本地非活动安装和远程运行服务器。如果我安装了您的程序,就会出现这种情况……“alias.conf”不是DLL,因此没有理由期望它出现在
sharedll
注册表项中。您不应该“悄悄地修改”与用户数据库配置有关的任何内容,因为您可能会破坏另一个(可能是关键的)不属于您的应用程序。