В прошлом я делал это разными способами в зависимости от того, как работает программа. Я думаю, что самый простой способ сделать это с помощью директивы препроцессора #DEBUG, связанной с Debugger.Launch (), поэтому при сборке оптимизированного проекта вызов Debugger.Launch () не будет скомпилирован в сборку.
Один способ, которым мы также выполнили эту задачу, - это System.Windows.Forms.MessageBox.Show («attach»), который позволял нам вручную подключаться к отладчику при каждом отображении диалогового окна «attach».
Последний способ, который я не предпочитаю, - это изменить поведение вашего сервиса на основе переданных параметров командной строки. По сути, выбирая НЕ запускать сервисы с использованием ServiceBase.Run всякий раз, когда конкретный параметр запускается, но вызывая класс, который инкапсулирует поведение / основную функцию сервиса.