0

自動的に起動する Windows サービスを作成しようとしています。サービスをインストールおよびアンインストールできます。起動しようとすると、次のエラー メッセージが表示されます。(私は翻訳しようとしています)「サービスは、開始または制御要求に間に合うように応答しません」.

これが私の貧弱なコードです

    public class LisaServerService: System.ServiceProcess.ServiceBase
{
    private Program lisaServerServiceProgram;

    public static string LisaServiceName = "LISA-ServerService";

    [STAThread]
    public static void Main(string[] args)
    {
        LisaServerService lisaServerService = new LisaServerService();

        if (Environment.UserInteractive)
        {
            lisaServerService.OnStart(args);
            Console.WriteLine("I am a service. Normally you can't see the console... just ignore me");
            Console.ReadLine();
            lisaServerService.OnStop();
        }
        else
        {
            ServiceBase.Run(lisaServerService);
        }
    }

    public LisaServerService()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.CanShutdown = true;
        this.ServiceName = "LISA - ServerService";
        this.CanPauseAndContinue = true;
        this.lisaServerServiceProgram = new Program();
    }

    protected override void OnStart(string[] args)
    {
        lisaServerServiceProgram.Start(null);
        base.OnStart(args);
    }

    protected override void OnStop()
    {
        lisaServerServiceProgram.Stop();
        base.OnStop();
    }

    protected override void OnShutdown()
    {
        OnStop();
        base.OnShutdown();
    }
}

Program.cs

    public class Program
{
    public Program()
    {
        Logger.LogLevel = LogLevel.Information;
        Logger.LogRange = LogRange.Write;
        Logger.Log("Logger initialized");
    }

    public void Start(string[] args)
    {
        DatabaseHandler.StartDatabase();
        NetworkHandler.StartNetwork();
        Logger.Log("Service started");
    }

サービスをコンソール プログラムとして実行すると、問題なく動作します。したがって、db接続+ロガーも正常に機能しています。(こちらも10ms以内)

4

1 に答える 1

1

インタラクティブ モードでサービスを実行している場合は、ここでコンソールを待機しています。

if (Environment.UserInteractive)
{
    lisaServerService.OnStart(args);
    Console.WriteLine("I am a service. Normally you can't see the console... just ignore me");
    Console.ReadLine();
    ...

そのため、サービスが開始されたことを示すためにサービスが適切に応答するのを妨げている可能性があります。

于 2013-09-04T20:19:21.520 に答える