作者:忄幹_856 | 来源:互联网 | 2023-05-19 03:14
RT。有代码解析最好了在网上查了些有通过检查注册表判断的方式,有通过列出局域网上SQLSERVER服务的方式1.检查注册表ARegistry:Tregistry
RT。
有代码解析最好了
在网上查了些 有通过检查注册表判断的方式,有通过列出局域网上SQLSERVER服务的方式
1.检查注册表
ARegistry := Tregistry.Create;
ARegistry.RootKey := HKEY_LOCAL_MACHINE;
try
ARegistry.OpenKey('SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\Registration', False);
cdkey := ARegistry.ReadString('CD_KEY');
ARegistry.CloseKey;
except
cdkey := '';
end;
问题:不管是否已安装SQLSERVER ,cdkey的值始终等于 ''
不知道我那个地方写的不对 还是这种判断方式有问题...
2.列出局域网上SQLSERVER服务
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
nServers := ServerList.Count;
for i := 1 to nservers do
begin
showmessage(ServerList.Item(i)); //无法列出本机的服务名称,因此无法检查本机是否安装
end;
SQLServer := NULL;
serverList := NULL;
各位帮忙看下错在哪儿 或者有没有更好的办法?
8 个解决方案
to: bdmh
我现在根本就无法列出本机的服务名称...怎么检查得到呀
只能列出部分 局域网其他电脑的服务名称..
我使用上面的代码 根本无法列出自己的SQL服务的 有问题 !
但是打开SQL Server Management Studio后再运行我的检查程序 又可以列出.. 怎么办?
采用ADOCONNECTION连接来判断
try
oCn.Connected := False;
oCn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;'
+ 'Persist Security Info=False;Initial Catalog=''master'';Data Source=(LOCAL)';
oCn.CommandTimeout := 0;
oCn.Open;
showmessage('已安装!');
except
showmessage('已安装!');
end;
可以实现判断 但会不会对程序性能造成很大影响?
第一第二种方法,程序可以运行,而且也不为空,没有异常,不知你出错在什么地方?
to:ffwin
我使用那两种方法都可以运行 没有异常 但是
第一种:cdkey的值始终是空的
第二种:在不打开SQL Server Management Studio的情况下 无法获得本机服务
所以我觉得会不会是我的代码有什么问题,没有办法 最后我采用了
ADOCONNECTION连接 无法连接时捕获抛出的异常来判断是否有SQLSERVER服务
无奈啊... 你有没有其他更好的办法?
我也是用第二种方法,用了好长时间了,没有发现有问题,呵呵