C# のコンソール アプリケーションを Windows サービスに変換する方法は? それを行うテンプレートはありますか?
質問する
11333 次
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 に答える