Отладка системной службы Windows в C # - PullRequest
3 голосов
/ 16 ноября 2011

Я получаю сообщение об ошибке «Невозможно запустить службу из командной строки или отладчика. Сначала необходимо установить службу Windows (с помощью installutil.exe), а затем запустить ее с помощью ServerExplorer, средства администрирования служб Windows или команды NET START.

Итак, нет ли способа запустить или протестировать службу Windows без ее установки? Должен ли я построить свой проект в консольном приложении, а затем перенести код в проект Windows Server после того, как он был протестирован?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Я склонен добавлять статический метод 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();
            }
        }
   }
2 голосов
/ 16 ноября 2011

Вы можете попытаться сохранить код, выполняющий фактическую работу, в отдельной сборке и вызвать этот код из службы или консольного приложения для тестирования.

0 голосов
/ 16 ноября 2011

есть два подхода, которые вы можете использовать.

  1. Создайте отдельное приложение формы Windows и вызовите этот код из проекта формы Windows.

  2. в методе вызова, пожалуйста, используйте:

     #if Debug
     Debugger.Launch()
     #endif
    

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...