Как отладить установку пользовательского сервиса Windows?

Я создал службу Windows в C# (4.0) и пытаюсь установить ее с помощью инструмента installutil в командной строке. Однако я получаю исключение. Мне удалось выяснить, какая часть моего кода вызывает исключение - используя какую-то дрянную регистрацию, но неважно - но теперь я хочу понять, почему. Итак, я хочу отладить установку моей службы Windows.

Я знаю, как отлаживать сам сервис, но здесь я хочу отладить содержимое моего Installer.Install(IDictionary stateSaver) метод в сервисе.

Я пытался подключить отладчик к процессу cmd.exe, но он, очевидно, не работает. Я думал также присоединить отладчик к процессу installutil, но понятия не имею, как это сделать.

Я посмотрел на этот пост: Как вы отлаживаете устанавливаемую службу Windows? и несколько других, но в этом случае, по какой-то причине, этот парень, кажется, уже имеет свой сервис в services.msc, что не в моем случае.

Как мне этого добиться?

2 ответа

Решение

Вы можете положить Debugger.Break(); заявление в коде установщика, и он должен запустить отладчик для вас.

Если вышеупомянутое не работает, я нашел этот процесс тоже работает. В основном вы компилируете в режиме отладки и устанавливаете службу (я использовал installutil.exe через командную строку). В коде вы всплываете окно сообщения с идентификатором процесса. Запустите второй экземпляр студии, присоедините его к этому процессу и отладьте. Окно сообщения приостанавливает его, чтобы разрешить настройку. Идентификатор процесса не важен, он называется InstallUtil.exe. Я обычно помещаю Debug.Break() после окна сообщения, чтобы гарантировать, что он входит в код.

using System.Windows.Forms;
using System.Diagnostics;

...

#if DEBUG 
int processId = Process.GetCurrentProcess().Id;
string message = string.Format("Please attach the debugger (elevated on Vista or Win 7) to process [{0}].", processId);
MessageBox.Show(message, "Debug");
#endif

....

Как отладить установку пользовательского сервиса Windows

Другие вопросы по тегам