到现在仍未解决,怎么用安装程序判断是否已安装SQL2000,没有则自动安装桌面版.关于D7+ADO+SQL2000发布 ( 积分: 50 )

  • 主题发起人 主题发起人 L.Ming
  • 开始时间 开始时间
L

L.Ming

Unregistered / Unconfirmed
GUEST, unregistred user!
如果发布D7+ADO+SQL2000的程序?要求在安装程序中自动检测当前计算机中是否已经安装SQL2000,如果没有,自动安装SQL2000个人版本.
谢谢有这样的例子的,能否给我一个?
lnming@yeah.net
 
如果发布D7+ADO+SQL2000的程序?要求在安装程序中自动检测当前计算机中是否已经安装SQL2000,如果没有,自动安装SQL2000个人版本.
谢谢有这样的例子的,能否给我一个?
lnming@yeah.net
 
判断计算机中是否已装有SQL server
方法一:
var registerTemp: TRegistry;
begin
registerTemp:=TRegistry.create;
with registertempdo
begin
rootkey := HKEY_LOCAL_MACHINE;
if OpenKey('Software/Microsoft/MSSQLServer/Setup', True) then
begin
if valueexists('SQLPath') then
已装
else
begin
未装
end;
end;
end;
registertemp.CloseKey;
registertemp.Free;
可以判断是否有装,没装的话也可以用一个命令自动安装,不过这得把SQLSERVER打包进去
方法二:
procedure Tfrm_DBParamSet.GetSQLServerLsit;
var
SQLServer: Variant;
ServerList: Variant;
i, nServers: integer;
begin
lst_SQLSrvList.Items.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
nServers := ServerList.Count;
for i := 1 to nserversdo
lst_SQLSrvList.Items.Add(ServerList.Item(i));
SQLServer := NULL;
serverList := NULL;
except
Application.MessageBox('您当前的机器没有安装SQL Server,无法导入SQL Server服务器列表,'+#13+#10+'请直接输入SQL Server服务器名称!','信息提示',MB_OK+MB_ICONINFORMATION);
end;
end;

方法三
MS-SQL中必有一个Master数据库,那么我们不妨做一个connection,连接此数据库,看是否成功。如果不行,再根据返回代码或者直接判断此机没装sql或者sql 有问题。
局限性是:
若此 sql的sa有口令或者它是其它用户登录的,你必须知道其登录方法。
 
方法一怎么在安装程序中实现?DELPHI的语句在哪个安装程序中可以实现?
 
客户端只需要安装MDAC
 
如果是客户端,不需要装你说的这些,在论坛里找找,有过类似的讨论,我就是这样用的,可以肯定的是:不用装
 
不是客户端呀,是服务器端.个人版的自动安装.大家帮帮忙啦.
 
将个人版SQLServer2000打包到一个程序的资源里(未压缩大概400多M),并在这个程序里检查SQLServer是否安装,把这个程序设置成安装包执行前执行的程序,这样一来,当执行这个程序时先检查SQLServer是否安装,未安装的话就释放出个人版安装程序,再执行那个个人版安装程序,完成后那个程序返回码为0,安装包继续安装服务端程序,结束。
 
to cmd9x:
谢谢你的思路,但这也是我想的,问题是怎么实现呀?这才是我不懂的.
 
不知道你的安装程序用什么工具作。我用installshield的脚本实现过这样的功能,不过不知道是否适合你
 
你可以看看delphi如何查询windows service(具体方法我记不清了),但如果sql2000安装了,无论什么版本service都会注册。(98,me下不行)
 
to 迷糊:
当然适合,学多一样是一样,你说是不是?
lnming@yeah.net
 
这是我在installshield中检测sqlserver是否安装的脚本,主要的判据是MSSQLSERVER服务是否安装win9x可能不适用 :(

//声明api函数
prototype HWND ADVAPI32.OpenSCManagerA(LPSTR,LPSTR,INT);
prototype HWND ADVAPI32.OpenServiceA(HWND,STRING,INT);
prototype HWND ADVAPI32.QueryServiceStatus(HWND,pointer);
prototype HWND ADVAPI32.StartServiceA (HWND,INT,pointer);
prototype BOOL ADVAPI32.ControlService(HWND,INT,pointer);
prototype BOOL ADVAPI32.CloseServiceHandle(HWND);

function INT ScanMssql() //检测sqlserver,以后考虑加上版本判断
HWND SC_MH,SC_SH;
SERVICE_STATUS S_Status;
begin
SC_MH=OpenSCManagerA(NULL,NULL,983103);
if SC_MH=0 then
return 4;
// 4: 安装异常,不能初始化service mananger
endif;
SC_SH=OpenServiceA(SC_MH,"MSSQLSERVER",983551);
if SC_SH=0 then
return 0;
//0: 没有安装sqlserver
else
QueryServiceStatus(SC_SH,&S_Status);
if S_Status.dwCurrentState=1 then
//MessageBox("MSSQLSERVER IS STOP",0);
if StartServiceA(SC_SH,0,NULL)=0 then
return 3;
//启动服务不正常
else
return 2;
//正常启动
endif;
else
return 1;

endif;

endif;

CloseServiceHandle(SC_SH);
CloseServiceHandle(SC_MH);
end;
 
to 斑竹:
对于爱不到要偷的方法
你,先安装。你可以把他放在程序的第一次启动中,如果有,就把你需要的库放到相应的位置,不就可以了吗。
好象,速达3000pro就是这样实现的。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部