Come installare un servizio Windows sviluppato in .NET 3.5?

Ho sviluppato un servizio Windows utilizzando Visual Studio 2008. Desidero installare quel servizio in una macchina in cui non è installato Visual Studio, ma è installato .NET 3.5.

Generalmente InstallUtil.exe deve essere utilizzato per l’installazione di un servizio di Windows, ma l’utilità InstallUtil.exe non è disponibile in .NET 3.5. Quando ho provato a installare quel servizio utilizzando .NET 2.0, il servizio viene visualizzato nell’elenco dei servizi ma all’avvio del servizio è in arrivo l’errore 1053 del servizio Windows. Come possiamo evitare questo problema e installare correttamente il servizio?

C’è un Microsoft KB su questo per. Net 2.0 e VS2005. La procedura è esattamente la stessa in. Net 3.5 e VS2008.

http://support.microsoft.com/kb/317421

Ed ecco un articolo più carino con le immagini per renderlo più chiaro. (A volte i KB non sono così amichevoli come tutorial che puoi trovare altrove.)

http://aspalliance.com/1316_Working_with_Windows_Service_Using_Visual_Studio_2005.3

In realtà è davvero semplice come ho fatto solo un paio di giorni fa per qualcosa che ho fatto.

Quindi nel tuo progetto di servizio vuoi:

  1. Nella soluzione explorer fare doppio clic sul file .cs dei servizi. Dovrebbe far apparire uno schermo che è tutto grigio e parla del trascinamento di cose dalla cassetta degli attrezzi.
  2. Quindi fare clic con il tasto destro sull’area grigia e selezionare Aggiungi programma di installazione. Questo aggiungerà un file di progetto di installazione al tuo progetto.
  3. Quindi avrai 2 componenti nella vista disegno di ProjectInstaller.cs (serviceProcessInstaller1 e serviceInstaller1). Dovresti quindi configurare le proprietà di cui hai bisogno.

Ora è necessario creare un progetto di installazione. La cosa migliore da fare è usare la procedura guidata di installazione.

  1. Fai clic con il tasto destro del mouse sulla soluzione e aggiungi un nuovo progetto: Aggiungi> Nuovo progetto> Progetti di installazione e configurazione> Installazione guidata
  2. Al secondo passaggio selezionare “Crea un’installazione per un’applicazione Windows”.
  3. Al terzo passaggio, seleziona “Uscita primaria da …”
  4. Clicca per finire.

Ora devi modificare il tuo programma di installazione per assicurarti che l’output corretto sia incluso.

  1. Fare clic con il tasto destro del mouse sul progetto di installazione in Solution Explorer.
  2. Seleziona Visualizza> Editor> Azioni personalizzate.
  3. Fai clic con il tasto destro del mouse sull’azione Installa nella struttura Azioni personalizzate e seleziona “Aggiungi azione personalizzata …”
  4. Nella finestra di dialogo “Seleziona elemento nel progetto”, selezionare Cartella dell’applicazione e fare clic su OK.
  5. Fare clic su OK per selezionare l’opzione “Uscita principale da …”. Dovrebbe essere creato un nuovo nodo.
  6. Ripetere i passaggi 4 – 5 per le azioni di commit, rollback e disinstallazione.

Ora basta creare il tuo programma di installazione e produrrà un MSI e un setup.exe. Scegli quello che vuoi utilizzare per distribuire il tuo servizio.

Se hai installato InstallUtil.exe per installare il tuo servizio Windows, significa che hai aggiunto un componente ProjectInstaller al tuo servizio. Tutto ciò che fa InstallUtil.exe è la reflection per trovare il componente installer incorporato nel tuo servizio ed eseguire alcuni metodi su di esso. A causa di ciò, è ansible modificare il servizio di Windows per installare e disinstallare se stesso, ovvero non è più necessario dipendere dal fatto che InstallUtil.exe sia disponibile sul computer di destinazione . Sto usando questo con successo per diversi mesi ora. Segui semplicemente il passo passo che ho fornito qui . L’idea originariamente appartiene a Marc Gravell e questo post .

Il messaggio:

“Errore 1053: il servizio non ha risposto alla richiesta di avvio o controllo in modo tempestivo.”

è in genere una risposta generica a un problema che avvia il servizio di Windows. Quello che dovresti fare è controllare il registro degli eventi e probabilmente troverai l’errore reale che impedisce l’avvio del servizio.