Запустить службу Windows как консольное приложение

Я думаю, что существует несколько проблем здесь. Во-первых, я думаю, что, возможно, задачи разработчика не являются или достаточно мелкомодульными, или возможно не оцененные хорошо, или возможно оба. Целая цель спринтов в Толпе состоит в том, чтобы быть в состоянии продемонстрировать осуществимый код в конце спринтов. Обе из проблем, которые я упомянул, могли привести к содержащему ошибки коду.

, Если бы разработчики являются содержащим ошибки кодом выпуска к концу спринта, я также посмотрел бы на:

  • владельцы продукта, действительно держащие dev участников, ответственных за получение их сделанных задач. Это - задание ПО и если этого не произойдет, тогда то разработчики будут слабеть.
  • devs, использующий любой вид TDD. В противном случае это могло бы помочь вопросам значительно. Получите разработчиков в привычке к тестированию их кода. У нас есть эта проблема, где я работаю, и моя команда фокусируется на выполнении TDD в важных областях так, чтобы мы не сделали, чтобы кто-то еще сделал это позже
  • , действительно ли истории задачи/пользователя слишком универсальны? Пространство для маневра в разбивках задачи заставит разработчиков быть неаккуратными. Снова, это - своего рода проблема ПО.

Одна идея, что я услышал прикинутый в прошлом, состоит в том, чтобы использовать человека QA в качестве scrummaster. Они будут присутствовать для ежедневной газеты standups и могут получить смысл того, где вещи в с разработчиками. Они могут решить проблемы с ПО (предполагающий, что ПО может соответственно сделать их задание).

я не могу не чувствовать, что Вам нужно больше корпорации между QA и Вашими командами толпы. Это кажется, что тестирование только происходит в конце, который является проблемой. Получение QA быть частью команды поможет определить вещи, которые могут быть протестированы ранее и лучше.

я также чувствую, что у Вас есть проблема с владельцем продукта. Они должны там удостоверяться, что все управляют правильным направлением. они должны удостоверяться, что существует хорошее сотрудничество, не только между QA и devs, но и между devs сами.

30
задан Kashif Khan 16 June 2017 в 11:31
поделиться

2 ответа

Чтобы предотвратить возникновение этой ошибки и позволить службе работать вне обычного контроллера службы, вы можете установить флажок Environment.UserInteractive. Если он установлен, вы можете запустить службу с выводом на консоль, вместо того, чтобы запускать ее с кодом ServiceBase, который возвращает эту ошибку.

Добавьте это в начало Program.Main () перед кодом, который использует ServiceBase для запуска службы:

        if (Environment.UserInteractive)
        {
            var service = new WindowsService();
            service.TestInConsole(args);
            return;
        }

Поскольку методы OnStart и OnStop protected в вашей службе, вам нужно чтобы добавить в этот класс другой метод, который вы можете запустить из Main (), и вызвать для вас эти методы, такие как:

    public void TestInConsole(string[] args)
    {
        Console.WriteLine($"Service starting...");
        this.OnStart(args);
        Console.WriteLine($"Service started. Press any key to stop.");
        Console.ReadKey();
        Console.WriteLine($"Service stopping...");
        this.OnStop();
        Console.WriteLine($"Service stopped. Closing in 5 seconds.");
        System.Threading.Thread.Sleep(5000);
    }

Наконец, убедитесь, что выходные данные являются консольным приложением в свойствах проекта.

Теперь вы можете запустить исполняемый файл службы, как и любой другой, и он запустится как консоль. Если вы запустите его из Visual Studio, отладчик подключится автоматически. Если вы зарегистрируете его и запустите как сервис, он будет работать как сервис без каких-либо изменений.

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

Этот метод отладки службы является одним из тех, которые описаны на docs.microsoft.com

3
ответ дан 27 November 2019 в 23:42
поделиться

Для решения этой проблемы создан пакет nuget: install-package WindowsService.Gui

Image of the runner GUI

Что делает пакет?

Это помогает путем создания пользовательского интерфейса Play / Stop / Pause при работе с подключенным отладчиком, но также позволяет устанавливать и запускать службу Windows в среде служб Windows. Все это с одной строкой кода! Что такое Service Helper Будучи тем, кто много пишет для Windows Services, может быть неприятно иметь дело с головными болями, связанными с отладкой сервисов. Часто это включает в себя уловки, взломы и частичные обходные пути для проверки всего вашего кода. У разработчиков Windows Services нет опыта «просто нажми F5».

Service Helper решает эту проблему, вызывая отображение пользовательского интерфейса, если подключен отладчик, имитирующий (как можно ближе) среду служб Windows.

Проект github находится здесь: https://github.com/wolfen351/windows-service-gui

Как использовать?

Самый простой способ получить Windows Service Helper в вашем проекте - использовать пакет ServiceProcess.Helpers NuGet на официальном фиде NuGet.

Просто внесите несколько изменений в типичный код в «Program.cs» для своего приложения:

using System.ServiceProcess;
using ServiceProcess.Helpers; //HERE

namespace DemoService
{
    static class Program
    {
    static void Main()
    {
        ServiceBase[] ServicesToRun;

        ServicesToRun = new ServiceBase[] 
            { 
                new Service1() 
            };

        //ServiceBase.Run(ServicesToRun);
        ServicesToRun.LoadServices(); //AND HERE
    }
    }
}

Раскрытие информации: я поддерживаю этот проект

1
ответ дан 27 November 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: