2

サービスのインストール (SC CREATE を使用)、開始 ( 「Delphi for Windows 8 で Windows サービスを開始する方法」の回答にあるものと非常によく似たコードを使用)、サービスの停止とアンインストールを可能にするサービス マネージャー アプリケーションを作成しました。

このサービスは、Delphi で記述された Windows サーバー exe アプリです。

突然 (数日前)、特定のマシン (Windows Server 2012R2) でサービスを開始できなくなりました。これは、Windows サービス コンソールからではなく、アプリケーションからの両方で発生します。

同じexe(マネージャーとサービス)が他のマシン(特に別のWindows Server 2012R2と私のWindows 10ワークステーション)で正常に動作します。

これは私が「測定」したものです:

1) サービスを開始しようとすると、このコードStartService(schs,0,psTemp)(WinAPI 呼び出し - 上記のリンクを参照) は true を返しません。

2) dpr にOutpuDebugStringメッセージを入れると、 DebugView でそれらを見ることができませんつまり、サービス exe が開始されていません。

3) Windows システム イベント ロガーでは、サービスに接続しようとしているときに 30 秒のタイムアウトがあることがわかります。

4)何かを書くだけのダミーのservice.exeを作成しても、OutpuDebugString起動できません

これはダミー サービスの実装です。

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Dummy.Controller(CtrlCode);
end;

function TDummy.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TDummy.ServiceAfterInstall(Sender: TService);
begin
   OutputDebugString('ServiceAfterInstall');
end;

procedure TDummy.ServiceAfterUninstall(Sender: TService);
begin
  OutputDebugString('ServiceAfterUninstall');
end;

procedure TDummy.ServiceBeforeInstall(Sender: TService);
begin
  OutputDebugString('ServiceBeforeInstall');
end;

procedure TDummy.ServiceBeforeUninstall(Sender: TService);
begin
   OutputDebugString('ServiceBeforeUninstall');
end;

procedure TDummy.ServiceExecute(Sender: TService);
var
  cnt : Integer;
begin
  cnt :=0;
  while not Terminated do
  begin
    inc(CNT);
    OutputDebugString(Pwidechar('ServiceExecute  Count '+IntTOstr(Cnt)));
    Sleep(1000);
    ServiceThread.ProcessRequests(False);
  end;

end;

procedure TDummy.ServiceStart(Sender: TService; var Started: Boolean);
begin
  OutputDebugString('ServiceStart');
end;

procedure TDummy.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  OutputDebugString('ServiceStop');
end;

この特定のマシンでは、2 週間前にサービスを開始できましたが、特に何もしていません。

もっとデバッグするために何ができるのだろうか、私は立ち往生しています。

タイムアウトが発生するのはなぜですか。サービス exe が開始されていないようです ( OutputDebugStringDebugView にメッセージが表示されると思われる場合)。

これは、数日前までは正常に実行されていた 1 台のマシンでのみ発生します。

助けてくれる人に感謝します!

4

0 に答える 0