用API获取windows服务的状态,以判断sqlserver是不是启动

用API获取windows服务的状态,以判断sqlserver是否启动
OpenSCManager在xp下正常返回句柄,但在2003server下返回0,怎么回事?

具体代码如下:
=====================
ulong lul_sch,lul_svc
string ls_database
S_SERVICE_STATUS lsss_1

if vs_machinename = '' then setnull(vs_machinename)
setnull(ls_database)


lul_sch = OpenSCManager(vs_machinename,ls_database,983103)  //SC_MANAGER_ALL_ACCESS (0xF003F)=983103

if lul_sch > 0 then
lul_svc = OpenService(lul_sch,ref vs_servicename,4)
if lul_svc > 0 then
QueryServiceStatus(lul_svc,ref lsss_1)
return lsss_1.dwCurrentState
else
return -1
end if
else
return -1
end if
=====================
其中vs_machinename是服务器ip,vs_servicename是服务名
------解决方案--------------------
呵呵,我没有2003的环境测试,不过我用的连接SQLSERVER的SQLDMO对象来判断SQLSERVER的状态,你也可以试试,一直很稳定的~~
OLEObject loo_SQLServer
string ls_error
int li_ret,li_Status

//启动服务器,配置数据库 
loo_SQLServer = CREATE OLEObject 
li_ret = loo_SQLServer.ConnectToNewObject("SQLDMO.SQLServer") 
if li_ret <> 0 then 
   ls_error = '未安装SQL Server服务器或SQL Server系统已经损坏!' 
   MessageBox('提示',ls_error,stopSign!)
   return
end if
loo_SQLServer.name = as_server //as_server为服务器名;
try 
li_Status = loo_SQLServer.Status 
catch (runtimeerror  aaa) 
ls_error = '指定服务器无效,服务器名:' + as_server 
end try 
if len(ls_error)>0 then 
   MessageBox('提示',ls_error,stopSign!)
   return
end if

if li_Status = 3  then//服务停止
elseif li_Status = 2  then//服务暂停 
else 
   //服务器正常
end if
------解决方案--------------------
刚才在pb9,2003下测试过了。

声明外部函数
Function ulong OpenSCManagerA(ref string lpMachineName,ref string lpDatabaseName,ulong dwDesiredAccess)LIBRARY "Advapi32.dll"

测试代码:
ULONG A,B

string P

SetNull(P)

B = 983103
A = OpenSCManagerA(P,P,B)

messagebox("",string(A))

完全可以的。