Interbase の再起動については、 http: //edn.embarcadero.com/article/28604に従ってください。ここにいくつかのコードがあります:
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 はどちらの場合もこれを返します。コード: 1060。指定されたサービスは、インストールされたサービスとして存在しません。
したがって、上記のコードでは、vService は常に 0 です。Themes などの別のサービスを停止しようとしても、実際に機能します。特別に処理しなければならないのは、文字列内のスペースですか? IIS Adminを閉じようとしましたが、Interbase と同じエラー メッセージが返されました。