微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 如何重启Interbase

我尝试按照 http://edn.embarcadero.com/article/28604重新启动Interbase.
这是一些代码

program IBRestart;

{$APPTYPE CONSOLE}

uses
  SysUtils,winsvc;

var
  vManager,vService: SC_Handle;
  vtmp: TServiceStatus;
begin
  vManager := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  if vManager > 0 then
  begin
    vService := OpenService(vManager,'InterBaseGuardian',SERVICE_START or SERVICE_STOP);
    if vService = 0 then           // vService is always 0 here,why ?
      CloseServiceHandle(vManager)
    else
    if ControlService(vService,SERVICE_CONTROL_STOP,vTmp) and
       QueryServiceStatus(vService,vTmp) and
       (vTmp.dwCurrentState = SERVICE_STOPPED) then
    begin
      WriteLn('Success');
    end;
  end;
end.

我注意到该服务在服务对话框中列为“InterBase 2009 Guardian gds_db”.我尝试过不同的变种作为OpenService的参数而没有成功……任何提示

编辑:
net start将服务列为InterBase 2009 Guardian gds_db和InterBase 2009 Server gds_db

在两种情况下,RaiseLastOSError都会返回此项:Project IBRestart.exe引发了异常类EOSError并显示消息“System Error”.代码:1060.指定的服务不作为已安装的服务存在’.

所以上面的代码中vService始终为0.我甚至试图阻止像Themes这样的其他服务,它确实有效.可以是字符串中必须特殊处理的空格吗?我试图关闭IIS Admin,它返回与Interbase相同的错误消息.

解决方法

这是我用于重新启动InterBase 2007的批处理文件,它向您显示在某些计算机上,服务名称中有一个额外的空间:

rem jpl: 20071015 - on some machines,the guardian service has an extra space
net stop "InterBase 2007 Guardian gds_db"
net stop "InterBase 2007 Guardian gds_db "
net stop "InterBase 2007 Server gds_db"
net start "InterBase 2007 Guardian gds_db"
net start "InterBase 2007 Guardian gds_db "
pause

请注意,我停止并启动两次Guardian;有时它在服务停止/开始超时期间没有反应.
我也特意停止了InterBase服务;它几乎不需要,但我有一次监护人服务停止了,但InterBase服务没有停止.

–jeroen

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐