次の変更により、他のコンソール アプリケーションと同様に Windows サービスをデバッグできます。
このクラスをプロジェクトに追加します。
public static class WindowsServiceHelper
{
[DllImport("kernel32")]
static extern bool AllocConsole();
public static bool RunAsConsoleIfRequested<T>() where T : ServiceBase, new()
{
if (!Environment.CommandLine.Contains("-console"))
return false;
var args = Environment.GetCommandLineArgs().Where(name => name != "-console").ToArray();
AllocConsole();
var service = new T();
var onstart = service.GetType().GetMethod("OnStart", BindingFlags.Instance | BindingFlags.NonPublic);
onstart.Invoke(service, new object[] {args});
Console.WriteLine("Your service named '" + service.GetType().FullName + "' is up and running.\r\nPress 'ENTER' to stop it.");
Console.ReadLine();
var onstop = service.GetType().GetMethod("OnStop", BindingFlags.Instance | BindingFlags.NonPublic);
onstop.Invoke(service, null);
return true;
}
}
次に-console
、Windows サービス プロジェクトのデバッグ オプションを追加します。
最後にこれをMain
inに追加しProgram.cs
ます:
// just include this check, "Service1" is the name of your service class.
if (WindowsServiceHelper.RunAsConsoleIfRequested<Service1>())
return;
私のブログ投稿からWindowsサービスをデバッグするより簡単な方法