Как запустить службу Windows в Visual Studio 2008? - PullRequest
0 голосов
/ 21 декабря 2009

В Visual Studio, когда я пытаюсь запустить проект службы Windows, он говорит мне, что я не могу, потому что я должен использовать «NET Start» и т. Д.

Я помню в VS 2003, что когда я нажимал play, он запускал службу и останавливал ее. Есть ли способ, когда я нажимаю кнопку воспроизведения или запуска для этого проекта службы Windows, я могу иметь такую ​​же функциональность.

Что я сейчас делаю, это устанавливаю их с помощью installutil, и я помещаю команду препроцессора с System.Diagnostics.Debug.Launch (), когда у меня определена переменная компиляции, и когда я использую диспетчер служб, он показывает мне окно для выберите отладчик. Тем не менее этот метод несколько громоздок.

Для всех, кто читает это, не забудьте попробовать отладить ОДИН поток одновременно.

1 Ответ

1 голос
/ 21 декабря 2009

Я обычно разрешаю переключение командной строки, которое я могу передать своему сервису, используя параметры аргумента командной строки в IDE. Когда этот переключатель включен, я могу запустить свой сервис как обычное приложение. Единственная проблема здесь заключается в том, что вам нужно помнить, что службы обычно работают под учетными записями с ограниченными разрешениями, поэтому при доступе к защищенным ресурсам отладка в качестве приложения в вашем пользовательском контексте может работать иначе. Вот пример кода:

static void Main()
{
    if (IsDebugMode())
    {
        MyService svc = new MyService();
        svc.DebugStart();

        bool bContinue = true;
        MSG msg = new MSG();

            // process the message loop so that any Windows messages related to
            // COM or hidden windows get processed.
        while (bContinue && GetMessage(out msg, IntPtr.Zero, 0, 0) > 0)
        {
            if (msg.message != WM_QUIT)
                DispatchMessage(ref msg);
            else
                bContinue = false;
        }
    }
    else
    {
        ServiceBase.Run(new MyService());
    }
}

public void DebugStart()
{
this.OnStart(null);
}

static bool IsDebugMode()
{
    return (System.Environment.CommandLine.IndexOf("debug") > -1);
}
...