Have you got tired of attaching the Visual Studio debugger to the service application? I got the solution just for you! It’s a small helper class containing a static
method which you need to invoke.
public static void Main(string[] argv) { // just include this check, "Service1" is the name of your service class. if (WindowsServiceHelper.RunAsConsoleIfRequested<Service1>()) return; // all other code }
Then go to project properties, the “Debug” tab and add “-console
” as Command Arguments.
How to configure Visual Studio
That’s it. What I do is simply allocate a console using the winapi and then invoke (through reflection) the properprotected
methods in your service class.
Source code for the helper class:
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; } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步