Windows 如何在delphi中查找firebird是否安装以及安装在何处
问题:我需要修改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 通过检查注册表项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
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
注册表项中。您不应该“悄悄地修改”与用户数据库配置有关的任何内容,因为您可能会破坏另一个(可能是关键的)不属于您的应用程序。