zoukankan      html  css  js  c++  java
  • An easier way to debug windows services

    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.

    Shows the debug settings under project properties

    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.
    Press 'ENTER' to stop it.");
            Console.ReadLine();
    
            var onstop = service.GetType().GetMethod("OnStop", 
    		BindingFlags.Instance | BindingFlags.NonPublic);
            onstop.Invoke(service, null);
            return true;
        }
    } 
  • 相关阅读:
    设计模式_抽象工厂模式
    KMeans聚类算法Hadoop实现
    JDK核心JAVA源代码解析(1)
    pushlet单播与多播
    SQL 2008 R2数据库变为REPLICATION,日志不断增长并且不能截断和收缩的解决方式
    chrome插件的popup与跨域请求
    Ubuntu vim+ ctags(包括系统函数) + taglist 配置
    spring Valid @Pattern 常见的验证表达式
    spring boot 全局异常处理
    spring 事件使用
  • 原文地址:https://www.cnblogs.com/yiwuya/p/3286282.html
Copyright © 2011-2022 走看看