我尝试按照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,并带有消息“系统错误。代码:1060。指定的服务不作为已安装的服务存在。
所以 vService 在上面的代码中始终为 0。我什至尝试停止其他服务,例如 Themes,它确实有效。可以是字符串中的空格必须特殊处理吗?我试图关闭IIS Admin,它返回了与 Interbase 相同的错误消息。