2

C# のコンソール アプリケーションを Windows サービスに変換する方法は? それを行うテンプレートはありますか?

4

3 に答える 3

9

コード内で、Environment.UserInteractive プロパティを使用して、現在のコンソール/サービス モードを判断できます。

例:

static class Program
{
    static void Main(params string[] args)
    {
        var service = new Service1();

        if (!Environment.UserInteractive)
        {
            var servicesToRun = new ServiceBase[] { service };
            ServiceBase.Run(servicesToRun);
            return;
        }

        Console.WriteLine("Running as a Console Application");
        Console.WriteLine(" 1. Run Service");
        Console.WriteLine(" 2. Other Option");
        Console.WriteLine(" 3. Exit");
        Console.Write("Enter Option: ");

        var input = Console.ReadLine();

        switch (input)
        {
            case "1":
                service.Start(args);
                Console.WriteLine("Running Service - Press Enter To Exit");
                Console.ReadLine();
                break;
            case "2":
                break;
        }
        Console.WriteLine("Closing");
    }
}

public partial class Service1 : ServiceBase
{
    public Service1() { InitializeComponent(); }
    public void Start(string[] args) { OnStart(args); }
    protected override void OnStart(string[] args) { }
    protected override void OnStop() { }
}
于 2013-03-19T07:32:15.090 に答える
0

デバッグを簡素化するために、デバッグ モードでビルドするときに、Windows サービスをコンソール アプリケーションとして実行することがよくあります。

あなたの場合の最も簡単なアプローチは、おそらく新しい Windows サービスを作成して、メイン エントリ ポイントの正しい構造と正しい参照を作成し、コンソール アプリ コードをその構造に統合することです。

コンソールへの/からの読み取り/書き込みは、書き直す必要があります。

ユーザー入力を読み取る必要がある場合は、その入力をサービスに提供する代替手段を検討してください。出力をコンソールに書き込む場合は、代わりにログに書き込みます。個人的にはNLogをお勧めします。

于 2013-03-19T07:22:18.323 に答える
-3

プロジェクトの一般プロパティ -> タイプをクラス ライブラリに変更します。
メイン関数は呼び出されないため、削除できます

于 2013-03-19T08:08:45.640 に答える