VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 921|回复: 4

如何在代码中重新启动SQL的服务

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-19 09:30:04 | 显示全部楼层 |阅读模式
如何在代码中重新启动SQL的服务
回复

使用道具 举报

0

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-26 13:45:01 | 显示全部楼层
net stop mssqlserver
net start mssqlserver
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-6-27 16:45:02 | 显示全部楼层
我知道用:
    Winexec('Net Stop MSSQLSERVER', SW_HIDE);
    Winexec('Net Start MSSQLSERVER', SW_HIDE);
但有时候不能成功,有没有直接调用服务函数,像C#中就可以直接用服务类的函数
回复

使用道具 举报

0

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-7-7 15:30:01 | 显示全部楼层
支持楼上的。

顺便摘抄一段代码,给LZ参考:
=======================================
uses WinSvc,SvcMgr !

Here's example I made. Hope it helps. "ServerServiceName" is the Name of
service to control.

procedure StartServiceExecute(Sender: TObject);
Var
  SCH: SC_HANDLE;
  SvcSCH: SC_HANDLE;
  arg: PChar;
begin
  SCH:= OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  If SCH=0 then
  Begin
    MessageDlg('Error: OpenSCManager', mtError, [mbOK], 0);
    Exit;
  End;

  Screen.Cursor:= crHourGlass;
  try
    SvcSCH:= OpenService(SCH, PChar(ServerServiceName), SERVICE_ALL_ACCESS);
    If SvcSCH=0 then
    Begin
      MessageDlg('Error: OpenService', mtError, [mbOK], 0);
      Exit;
    End;

    try
      arg:= nil;
      If Not StartService(SvcSCH, 0, arg) then
      Begin
        Case GetLastError of
          ERROR_ACCESS_DENIED              :MessageDlg('The specified handle
was not opened with SERVICE_START access.', mtError, [mbOK], 0);
          ERROR_INVALID_HANDLE             :MessageDlg('The specified handle
is invalid.', mtError, [mbOK], 0);
          ERROR_PATH_NOT_FOUND             :MessageDlg('The service binary
file could not be found.', mtError, [mbOK], 0);
          ERROR_SERVICE_ALREADY_RUNNING    :MessageDlg('An instance of the
service is already running.', mtError, [mbOK], 0);
          ERROR_SERVICE_DATABASE_LOCKED    :MessageDlg('The database is
locked.', mtError, [mbOK], 0);
          ERROR_SERVICE_DEPENDENCY_DELETED :MessageDlg('The service depends
on a service that does not exist or has been marked for deletion.', mtError,
[mbOK], 0);
          ERROR_SERVICE_DEPENDENCY_FAIL    :MessageDlg('The service depends
on another service that has failed to start.', mtError, [mbOK], 0);
          ERROR_SERVICE_DISABLED           :MessageDlg('The service has been
disabled.', mtError, [mbOK], 0);
          ERROR_SERVICE_LOGON_FAILED       :MessageDlg('The service could
not be logged on. This error occurs if the service was started from an
account that does not have the "Log on as a service" right.', mtError,
[mbOK], 0);
          ERROR_SERVICE_MARKED_FOR_DELETE  :MessageDlg('The service has been
marked for deletion.', mtError, [mbOK], 0);
          ERROR_SERVICE_NO_THREAD          :MessageDlg('A thread could not
be created for the service.', mtError, [mbOK], 0);
          ERROR_SERVICE_REQUEST_TIMEOUT    :MessageDlg('The process for the
service was started, but it did not call StartServiceCtrlDispatcher, or the
thread that called StartServiceCtrlDispatcher may be blocked in a control
handler function.', mtError, [mbOK], 0);
          Else                              MessageDlg('Error:
StartService', mtError, [mbOK], 0);
        End;{CASE}
      End;
      CheckServiceState;
    finally
      CloseServiceHandle(SvcSCH);
    end;
  finally
    Screen.Cursor:= crDefault;
    CloseServiceHandle(SCH);
  end;
end;

procedure StopServiceExecute(Sender: TObject);
Var
  SCH: SC_HANDLE;
  SvcSCH: SC_HANDLE;
  ss: TServiceStatus;
begin
  SCH:= OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  If SCH=0 then
  Begin
    MessageDlg('Error: OpenSCManager', mtError, [mbOK], 0);
    Exit;
  End;

  Screen.Cursor:= crHourGlass;
  try
    SvcSCH:= OpenService(SCH, PChar(ServerServiceName), SERVICE_ALL_ACCESS);
    If SvcSCH=0 then
    Begin
      MessageDlg('Error: OpenService', mtError, [mbOK], 0);
      Exit;
    End;

    try
      If Not ControlService(SvcSCH, SERVICE_CONTROL_STOP, ss) then
      Begin
        Case GetLastError of
          ERROR_ACCESS_DENIED               :MessageDlg('The specified
handle was not opened with the necessary access.', mtError, [mbOK], 0);
          ERROR_DEPENDENT_SERVICES_RUNNING  :MessageDlg('The service cannot
be stopped because other running services are dependent on it.', mtError,
[mbOK], 0);
          ERROR_INVALID_HANDLE              :MessageDlg('The specified
handle was not obtained using CreateService or OpenService, or the handle is
no longer valid.', mtError, [mbOK], 0);
          ERROR_INVALID_PARAMETER           :MessageDlg('The requested
control code is undefined.', mtError, [mbOK], 0);
          ERROR_INVALID_SERVICE_CONTROL     :MessageDlg('The requested
control code is not valid, or it is unacceptable to the service.', mtError,
[mbOK], 0);
          ERROR_SERVICE_CANNOT_ACCEPT_CTRL  :MessageDlg('The requested
control code cannot be sent to the service because the state of the service
is SERVICE_STOPPED, SERVICE_START_PENDING, or SERVICE_STOP_PENDING.',
mtError, [mbOK], 0);
          ERROR_SERVICE_NOT_ACTIVE          :MessageDlg('The service has not
been started.', mtError, [mbOK], 0);
          ERROR_SERVICE_REQUEST_TIMEOUT     :MessageDlg('The process for the
service was started, but it did not call StartServiceCtrlDispatcher, or the
thread that called StartServiceCtrlDispatcher may be blocked in a control
handler function.', mtError, [mbOK], 0);
          ERROR_SHUTDOWN_IN_PROGRESS        :MessageDlg('The system is
shutting down.', mtError, [mbOK], 0);
          Else                               MessageDlg('Error:
ControlService', mtError, [mbOK], 0);
        End;
      End;
      CheckServiceState;
    finally
      CloseServiceHandle(SvcSCH);
    end;
  finally
    Screen.Cursor:= crDefault;
    CloseServiceHandle(SCH);
  end;
end;

如果出现编译错误,请删除CheckServiceState则一行代码,这个对你没有什么用!可以删除的。
==================================
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-8 01:45:01 | 显示全部楼层
SHUTDOWN WITH NOWAIT也可以关闭SQL SERVER服务
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表