Durante lo sviluppo di un servizio windows ho dovuto affrontare la problematica del debug. In genere per eseguire il debug è necessario "attaccarsi" al processo.
E' però possibile eseguire un debug da visual studio utilizzando i break point con un picolissimo stratagemma.
Dato che si tratta di service, che non richiede un interfaccia utente, possiamo eseguire una distinzione tra l'esecuzione da visual studio e da "servizio installato". Questo è possibile farlo nella Program.cs
static class Program { static void Main(string[] args) { // if userinteractive call in debug mode if (Environment.UserInteractive) { // execute as class with debug true new serviceMain(true); } else { //execute as service ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new serviceMain(false) }; ServiceBase.Run(ServicesToRun); } } } public partial class serviceMain : ServiceBase { public serviceMain(Boolean debug) { InitializeComponent(); // if debug manual start if (debug) { // manual start OnStart(null); } } protected override void OnStart(string[] args) { } }
Dovrebbe essere tutto abbastanza chiaro. Lasciate commenti nel caso di dubbi.