2

Windows Serviceウィザードを使用して新しいプロジェクトを作成し、コードを追加してコンパイルし、実行して/INSTALLから、使用して開始しようとしnet start myserviceましたが、service name not foundエラーが発生しました。次に、[サービス] の [コントロール パネル] に移動し、[開始] リンクをクリックしようとすると、表示されるダイアログ ウィンドウがプログレス バーの 50% で無期限にフリーズします。

開発中のメインシステムを更新するサービスを作るのはこれが初めての試みで、テスト用にTimer1 分ごとに時刻を知らせる を入れました。何が間違っているのか、なぜそのように振る舞っているのか、誰でも気付くことができますか?

次のDPRファイル:

{...}
begin
  if not Application.DelayInitialize or Application.Installing then
  begin
    Application.Initialize;
  end;
  Application.CreateForm(TZeusUpdateSevice, ZeusUpdateSevice);
  Application.Run;
end.

および次のPASファイル:

{...}
procedure ServiceController(CtrlCode: DWord); stdcall; 
begin
  ZeusUpdateSevice.Controller(CtrlCode);
end;

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

procedure TZeusUpdateSevice.ServiceAfterInstall(Sender: TService);
var
  regEdit : TRegistry;
begin
  regEdit := TRegistry.Create(KEY_READ or KEY_WRITE);
  try
    regEdit.RootKey := HKEY_LOCAL_MACHINE;

    if regEdit.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name,False) then
    begin
      regEdit.WriteString('Description','Mantém atualizados os arquivos e as credenciais da Plataforma Zeus.');
      regEdit.CloseKey;
    end;

  finally
    FreeAndNil(regEdit);
  end;
end;

procedure TZeusUpdateSevice.ServiceStart(Sender: TService; var Started: Boolean);
begin
{ executa os processos solicitados pelo sistema }
  Timer1.Enabled := True;
  while not Terminated do ServiceThread.ProcessRequests(True);
  Timer1.Enabled := False;
end;

procedure TZeusUpdateSevice.Timer1Timer(Sender: TObject);
begin
  ShowMessage('Now, time is: ' + TimeToStr(Now));
end;
4

1 に答える 1