在C#中调试窗口系统服务

时间:2011-11-16 19:03:24

标签: c# debugging service

我收到错误“无法从命令行或调试程序启动服务。必须首先安装Windows服务(使用installutil.exe),然后使用ServerExplorer,Windows服务管理工具或NET START命令启动。” / p>

那么,有没有办法在不安装的情况下运行或测试Windows服务?我应该在控制台应用程序中构建我的项目,然后在测试后将代码传输到Windows Server项目吗?

感谢。

3 个答案:

答案 0 :(得分:3)

我倾向于在我的服务类中添加一个静态Main方法,以便可以将其作为控制台应用程序进行调试,但也可以作为服务进行安装和运行。

类似于以下内容:

    public partial class ControllerService : ServiceBase
    {

        static void Main(string[] args)
        {
            ControllerService service = new ControllerService();

            cmdLine = CommandLineParser.Parse(args);

            if (Environment.UserInteractive)
            {
                switch (cmdLine.StartMode)
                {
                    case StartMode.Install:
                        //Service Install Code Here
                        break;
                    case StartMode.Uninstall:
                        //Service Uninstall Code Here
                        break;
                    case StartMode.Console:
                    default:
                        service.OnStart(args);
                        consoleCloseEvent.WaitOne();
                        break;
                }
            }
            else
            {
                ServiceBase.Run(service);
            }
        }

        protected override void OnStart(string[] args)
        {
             //Do Start Stuff Here
        }

        protected override void OnStop()
        {
            if (Environment.UserInteractive)
            {
                consoleCloseEvent.Set();
            }
        }
   }

答案 1 :(得分:2)

您可以尝试在单独的程序集中保留执行实际工作的代码,并从服务或控制台应用程序调用该代码进行测试。

答案 2 :(得分:0)

您可以使用两种方法。

  1. 创建单独的Windows窗体应用程序,并从Windows窗体项目中调用该代码。

  2. 在调用方法中,请使用:

     #if Debug
     Debugger.Launch()
     #endif
    
  3. 我希望它有所帮助。