2013-04-04 14 views
22

Ho creato un servizio Windows utilizzando C# in Visual Studio 2010. Ho fatto molte ricerche sull'automazione del processo di installazione. Ho molti consigli ma nessuno ha funzionato per me. Il servizio Windows che ho creato ha molte dipendenze e vorrei che il client non avesse un'interfaccia utente durante l'installazione. Ho creato un progetto di installazione per questo che include tutte le mie dipendenze all'interno dell'installer.Qual è il modo migliore di automatizzare la distribuzione di Windows Service?

processo coinvolto:

  • creare una build per il servizio di Windows
  • Spingere il file di installazione (.msi) a posizione a distanza
  • Chiamare il msi e installare il servizio in silenzio senza l'interazione dell'utente.

quello che ho fatto finora:

  • creato uno script PowerShell per spingere i file in posizione remota
  • eseguire lo script PowerShell e installare il servizio

Si prega di tenere presente che PowerShell script

sc create "servicename" binpath="somepath" 

viene utilizzato per l'installazione del servizio da una directory di progetto, non per l'installazione del file .msi creato con Setup Project, sono due cose molto diverse. Se non lo capisci, non rispondere per favore.

Possibili soluzioni:

Ora la mia domanda è. Come posso spingere il programma di installazione del servizio Windows nella posizione remota? E come è possibile creare argomenti di compilazione personalizzati e utilizzare il pacchetto di estensione msbuild o il task Exec e installare il servizio?

So che sembra una domanda stupida e irritante per qualcuno che non ha installato il servizio utilizzando (.MSI) creato dal progetto di installazione. Ma sono le mie esigenze che sto cercando di risolvere da settimane nell'ambiente aziendale.

+0

hai avuto successo nell'automazione della distribuzione di Windows Service? – bhupinder

risposta

15

Farei la maggior parte del lavoro dallo script PowerShell.

  1. utilizzare l'attività msbuild Exec come voi hanno citato per aggiungerlo al vostro processo di compilazione. Ecco un buon articolo su using the exec task to run your powershell script.

  2. Poiché si utilizza VS 2010, un setup and deployment project è piuttosto semplice. Aggiungi uno alla tua soluzione e aggiungi l'output del tuo progetto di servizio. Ecco un articolo su adding the setup project for a windows service.

  3. Utilizzare gli script di PowerShell per copiare il file di installazione .msi sul server remoto. Puoi semplicemente usare copy-item [source] [destination] se hai accesso alla condivisione file.

  4. Arresta il servizio sulla macchina remota. È possibile utilizzare (get-service -ComputerName [destination] -Name [service-name]).Stop() (da this question)

  5. installare il servizio silenziosamente utilizzando psexecpsexec \\remotecomputer "[msi-destination-path]" /qnHere's the rest of the command line options for the .msi.

  6. Avviare il servizio utilizzando (get-service -ComputerName [destination] -Name [service-name]).Start()

Vorrei anche aggiungere un po 'di parametri al PowerShell script per il server di destinazione, il nome del servizio, ecc. Renderà molto più semplice mantenere questa parte del processo di compilazione. Probabilmente il tuo build agent dovrà essere anche un amministratore sul computer di destinazione.

Infine, assicurati di inserire lo script di generazione di PowerShell nel controllo del codice sorgente!

Edit (giugno 2014)
VS 2013 has installer projects again! (Siamo spiacenti, VS 2012)

Inoltre, se trovato this awesome answer su come installare un servizio di Windows senza utilizzare un progetto di installazione.

+0

grazie Zachary spero che questo verrà installato –