1つのメインクラスを持つアプリケーションがあります。これはServiceBaseメソッドをオーバーライドし、Main()静的メソッドを持っています。コマンドラインから呼び出される場合はMain()メソッドを使用し、Windowsサービス管理から呼び出される場合はOnStart()/ OnStop()を使用したいと思います。
このアプリをinstallutilsを使用してサービスとして正常にインストールしましたが、起動すると、期待どおりにOnStart()ではなくMain()メソッドが呼び出されます。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Xml.Serialization;
using System.Runtime.Serialization.Json;
using System.Threading;
using System.ServiceProcess;
using System.Configuration.Install;
using System.Reflection;
namespace Test
{
class Program : ServiceBase
{
static void Main(string[] args)
{
log.Error("Run as App");
}
protected override void OnStart(string[] args)
{
log.Info("Starting service");
}
protected override void OnStop()
{
log.Info("Stopping service");
}
}
}
Windowsサービスには有罪の秘密があります。彼らは、昔ながらのコンソールアプリケーションとして生活を始めます。サービスに変換されるのは、実行を開始してサービスコントロールマネージャーに登録した後です。
そのため、はい、それMain
が最初に呼び出されるエントリポイントであるのは正しいです。その時点では、それは単なるコンソールアプリだからです。
サービスがサービスコントロールマネージャーに登録されてサービスになる方法ServiceBase.Run()
は、Main
メソッド(またはそれが呼び出すメソッド)から呼び出すことによって処理されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加