uses WinSvc;procedure TForm1.Button1Click(Sender: TObject);
var
  x, y: SC_HANDLE;
  c: PChar;
  d: TServiceStatus;
begin
  x := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  y := OpenService(a, 'MSSQLServer', SERVICE_ALL_ACCESS);
  QueryServiceStatus(y, d);
  if d = SERVICE_RUNNING then
    ShowMessage('MSSQLServer 正在运行。');
//----------------------------------------------
  StartService(b, 0, c);  //开启MSSQLServer
  ControlService(b, SERVICE_CONTROL_STOP, d); //中断MSSQLServer
end;

解决方案 »

  1.   

    不好意思,请把x,y改为a,b.
      

  2.   

    好像 d = SERVICE_RUNNING 有问题。
    应该是 d.dwCurrentState = SERVICE_RUNNING 吧!
      

  3.   

    reigod(月影清风下,自在逍遥中) 老兄好象没用。
      

  4.   

    Dim my As PROCESSENTRY32
      Dim l As Long, l1 As Long, sqlRunning As Boolean
      
      sqlRunning = False
      l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
      If l Then
        my.dwSize = 1060
        If (Process32First(l, my)) Then 
          Do
            If InStr(my.szExeFile, "SQLSERVR.EXE") Then
                sqlRunning = True
                l1 = CloseHandle(l)
                Exit Sub
            End If
          Loop Until (Process32Next(l, my) < 1) 
        End If
        l1 = CloseHandle(l)
      End If
      
      If sqlRunning = False Then
         Shell "c:\mssql7\binn\scm.exe -Action 1 -Silent 1", vbHide
         MsgBox "还没有启动数据库服务,正在启动...", 0, "提示"
      End If
    End Sub
      

  5.   

    TO reigod(月影清风下,自在逍遥中) 谢谢你老兄,但是你的的确好像不行,
    TO ckwin(飞龙) 你的代码我正在看。
      

  6.   

    不好意思,敲急了。cocochen说的对,要写成d.dwCurrentState = SERVICE_RUNNING
      

  7.   

    To reigod(月影清风下,自在逍遥中) 你的方法不行,倒是ckwin(飞龙) 老兄的方法可以一试
      

  8.   

    reigod(月影清风下,自在逍遥中):你的是好像不行