用api函数:
OpenSCManager()
OpenService()
QueryServiceStatus()
ControlService()
StartService()
具体请参考msdn

解决方案 »

  1.   

    我这里倒是有一段例子,因为是第一次做的,代码很乱,我自己都不想再看,想要给你贴上。
    (有更好的耐心的话看 msdn,我当初就是那么做的)。
      

  2.   

    '启动SQL Server服务
    temp_long = OpenSCManager("", SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
    If temp_long <> 0 Then
       temp_long2 = OpenService(temp_long, "MSSQLServer", SERVICE_ALL_ACCESS)
       If temp_long2 <> 0 Then
           If QueryServiceStatus(temp_long2, ServiceStatus) <> 0 Then
                   Do While QueryServiceStatus(temp_long2, ServiceStatus) <> 0 '确保服务处于确定的状态
                     If ServiceStatus.dwCurrentState = SERVICE_PAUSED Or ServiceStatus.dwCurrentState = SERVICE_STOPPED Or ServiceStatus.dwCurrentState = SERVICE_RUNNING Then
                        Exit Do
                     End If
                     DoEvents
                   Loop
               If ServiceStatus.dwCurrentState = SERVICE_PAUSED Then '暂停服务状态
                  temp_long3 = ControlService(temp_long2, SERVICE_CONTROL_CONTINUE, ServiceStatus)
                  temp_long4 = GetLastError()
                  Do While QueryServiceStatus(temp_long2, ServiceStatus) <> 0
                     If ServiceStatus.dwCurrentState = SERVICE_PAUSED Or ServiceStatus.dwCurrentState = SERVICE_STOPPED Or ServiceStatus.dwCurrentState = SERVICE_RUNNING Then
                        Exit Do
                     End If
                     DoEvents
                   Loop
                  If temp_long3 = 0 Then
                      MsgBox "无法启动SQL Server服务,安装无法继续。", , setup_app_title
                      'MsgBox GetLastError()
                      End
                  End If
               End If
               If ServiceStatus.dwCurrentState <> SERVICE_RUNNING Then
                   'Shell "net start MSSQLServer", vbHide
                   Form1.Label1.Caption = "正在启动SQL Server服务......"
                   temp_long3 = StartService(temp_long2, 0, 0)
                   temp_long4 = GetLastError()
                   Do While QueryServiceStatus(temp_long2, ServiceStatus) <> 0
                     If ServiceStatus.dwCurrentState = SERVICE_PAUSED Or ServiceStatus.dwCurrentState = SERVICE_STOPPED Or ServiceStatus.dwCurrentState = SERVICE_RUNNING Then
                        Exit Do
                     End If
                     DoEvents
                   Loop
                   Form1.Label1.Caption = "检测数据库Campus......"
                   If temp_long3 = 0 And temp_long4 <> 1056 Then '1056:服务已经运行
                      MsgBox "无法启动SQL Server服务,安装无法继续。", , setup_app_title
                      'MsgBox GetLastError()
                      End
                   End If
               End If
           Else '检测不到服务状态
              MsgBox "无法检测到SQL Server服务的状态,请确认MS SQL Server已经正确安装,并且启动了服务。", , setup_app_title
              'Shell "net start MSSQLServer", vbHide
              End
           End If
       Else
           MsgBox "无法检测到SQL Server服务的状态,请确认MS SQL Server已经正确安装,并且启动了服务。", , setup_app_title
           End
       End If
    Else
        MsgBox "无法检测到SQL Server服务的状态,请确认您有足够的权限,建议以管理员身份登陆进行安装。", , setup_app_title
        End
    End If
    next2:
    fmpwd.Show 1
    Select Case FindDatabase(sqlserver_server, sqlserver_user, sqlserver_pwd, sqlserver_db)
    Case 0
    Case 1
    Form1.Label1.Caption = "检测到数据库Campus已经存在。"
    If MsgBox("数据库campus已经存在。建议您备份数据库以后删除现有数据库,然后再安装本软件。您也可以现在直接删除数据库,继续安装。要删除现有数据库吗?", vbYesNo, setup_app_title) = vbYes Then '删除旧的数据库
       Call DetachDatabase(sqlserver_server, sqlserver_user, sqlserver_pwd, sqlserver_db)
       If FindDatabase(sqlserver_server, sqlserver_user, sqlserver_pwd, sqlserver_db) = 1 Then
          MsgBox "无法删除数据库,请手工删除,然后再进行安装。", , setup_app_title
          End
       End If
       Call WriteFlag("1")
    End If
    End
    Case 2
    MsgBox "无法连接SQL Server服务器,安装无法继续进行。", , setup_app_title
    End
    End Select实在难看,:-(
      

  3.   

    忘了说一点,除了用api以外,还可以用命令net,参考windows2000的帮助,这样简单一点,但是不可控制,我还是喜欢用api
      

  4.   

     不知您的API是如何定义的,msdn上的资料我找过了,但帮助不大,谢谢了!
      

  5.   

    vb不是带有api浏览器吗?用那个。
    其实msdn是最全的,不过我当时看了很久,因为e文不好!以下是从我工程里拷贝下来的,有部分声明可能用不着,如果有缺的,编译时会有提示。Public Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
    Public Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long
    Public Declare Function QueryServiceStatus Lib "advapi32.dll" (ByVal hService As Long, lpServiceStatus As SERVICE_STATUS) As Long
    Public Declare Function ControlService Lib "advapi32.dll" (ByVal hService As Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As Long
    Public Declare Function SetServiceStatus Lib "advapi32.dll" (ByVal hServiceStatus As Long, lpServiceStatus As SERVICE_STATUS) As Long
    Public Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As LongPublic Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Public Const SERVICE_QUERY_CONFIG = &H1Public Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2
    Public Const SERVICE_ACCEPT_SHUTDOWN = &H4
    Public Const SERVICE_ACCEPT_STOP = &H1
    Public Const SERVICE_ACTIVE = &H1
    Public Const SERVICE_CHANGE_CONFIG = &H2
    Public Const SERVICE_CONTINUE_PENDING = &H5
    Public Const SERVICE_CONTROL_CONTINUE = &H3
    Public Const SERVICE_CONTROL_INTERROGATE = &H4
    Public Const SERVICE_CONTROL_PAUSE = &H2
    Public Const SERVICE_CONTROL_SHUTDOWN = &H5
    Public Const SERVICE_CONTROL_STOP = &H1
    Public Const SERVICE_ENUMERATE_DEPENDENTS = &H8
    Public Const SERVICE_INACTIVE = &H2
    Public Const SERVICE_INTERROGATE = &H80
    Public Const SERVICE_NO_CHANGE = &HFFFF
    Public Const SERVICE_PAUSE_CONTINUE = &H40
    Public Const SERVICE_PAUSE_PENDING = &H6
    Public Const SERVICE_PAUSED = &H7
    Public Const SERVICE_QUERY_STATUS = &H4
    Public Const SERVICE_RUNNING = &H4
    Public Const SERVICE_START = &H10
    Public Const SERVICE_START_PENDING = &H2
    Public Const SERVICE_STATE_ALL = (SERVICE_ACTIVE Or SERVICE_INACTIVE)
    Public Const SERVICE_STOP = &H20
    Public Const SERVICE_STOP_PENDING = &H3
    Public Const SERVICE_STOPPED = &H1
    Public Const SERVICE_USER_DEFINED_CONTROL = &H100
    Public Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
    Public Const SERVICES_FAILED_DATABASE = "ServicesFailed"
    Public Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL)Public Const SC_MANAGER_CONNECT = &H1
    Public Const SC_MANAGER_CREATE_SERVICE = &H2
    Public Const SC_MANAGER_ENUMERATE_SERVICE = &H4
    Public Const SC_MANAGER_LOCK = &H8
    Public Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20
    Public Const SC_MANAGER_QUERY_LOCK_STATUS = &H10
    Public Const GENERIC_READ = &H80000000
    Public Const GENERIC_WRITE = &H40000000
    Public Const GENERIC_EXECUTE = &H20000000
    Public Const GENERIC_ALL = &H10000000
    Public Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)Public Type SERVICE_STATUS
            dwServiceType As Long
            dwCurrentState As Long
            dwControlsAccepted As Long
            dwWin32ExitCode As Long
            dwServiceSpecificExitCode As Long
            dwCheckPoint As Long
            dwWaitHint As Long
    End TypePublic Type LUID
        lowpart As Long
        highpart As Long
    End Type
    Public Type LARGE_INTEGER
        lowpart As Long
        highpart As Long
    End TypePublic Type LUID_AND_ATTRIBUTES
            pLuid As LARGE_INTEGER
            Attributes As Long
    End Type
    Public Type TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type