l'installazione di servizio di Windows con SC.exe o InstallUtil.exe - non c'è differenza, ma che?

StackOverflow https://stackoverflow.com/questions/4692250

Domanda

SC.exe e InstallUtil sia installare / disinstallare i servizi di Windows. Ma non sembrano funzionare allo stesso modo.

Qual è la differenza?


Per esempio InstallUtil non riesce (alcuni file o dipendenza non trovato errore), mentre Sc creare installa felicemente il servizio. Troppo aggiungere alla stranezza; il servizio non si presenta se corro net start nella console. Ma non compare nella GUI servizi. Varianti di questo accada quando si tenta di disinstallare.

ho scritto io stesso il servizio e le versioni precedenti lavori. Dotnet3.5.

È stato utile?

Soluzione

Sì, l'installazione di un servizio non è particolarmente complicato. Ci vuole solo scrivere una manciata di chiavi di registro. Si può avere un look-vedere con Regedit.exe, accedere a HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services.

Sc.exe può scrivere queste chiavi anche, utilizzando gli argomenti della riga di comando in dotazione. Tuttavia, questo non è il modo giusto per farlo. Il punto di InstallUtil.exe è che può attivare personalizzata codice di installazione. Il codice che l'autore del servizio ha scritto. Il che non è che non comuni, i servizi tendono a informazioni roba config nella loro chiavi di registrazione per il loro uso. Vedrete un sacco di prove per questo quando si ha un look con Regedit.

Altri suggerimenti

Io preferisco SC.exe oltre installutil.exe milione di volte.

installutil forze di aggiungere la classe ProjectInstaller terribile (credo) e hardcode c'è il nome del servizio e il servizio descrizione.

Questo è lo rende molto difficile da mettere due versioni dello stesso servizio in esecuzione nella stessa macchina allo stesso tempo.

È per questo che ho appena non usano InstallUtil.exe affatto. Anche a causa di risposte precedenti: ne avete bisogno di essere nel pacchetto deploy. sc.exe è già in ogni Xp di Windows e soprattutto (credo).

differenza

principale è che InstallUtil non è di utilità destinato per l'installazione del servizio, ma come strumento generale di installazione. Dalle pagine MSDN si può vedere che:

"Lo strumento Installer è un'utility a riga di comando che consente di installare e disinstallare le risorse del server eseguendo il programma di installazione componenti in assembly specificati. Questo strumento funziona in congiunzione con le classi nello spazio dei nomi System.Configuration.Install ".

Così può installare il servizio, ma ha molti molti molti altri benefici. Creazione di eseguibili basati su Installer Classe ti dà il controllo programmatico di tutta la procedura di installazione / disinstallazione. ServiceInstaller e < a href = "http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceprocessinstaller%28v=vs.110%29.aspx" rel = "noreferrer"> ServiceProcessInstaller , ad esempio , sono utilizzati per l'installazione del servizio.

utilità 'Sc' viene utilizzato per il controllo del servizio e 'creare' il comando sarà solo creare il servizio sulla base di scelta eseguibile.

Nel tuo esempio
1. Non è destinato a essere installato con InstallUtil e risposta di errore deve essere ben chiaro a questo proposito.
2. InstallUtil non riesce a causa di un bug nel codice di installazione e l'utilizzo di sc create sarà probabilmente creare un servizio difettoso per voi. Check in {} exe_name .InstallLog per i dettagli.

Dalla esperienza di utilizzo di disinstallazione: sc.exe sotto Windows 7 rimuove la voce dalla lista immediatamente, mentre dopo la disinstallazione con installutil v'è la necessità per il riavvio

Mentre InstallUtil è il modo migliore per andare con i servizi .NET, uno dei suoi difetti è non prenderà redirect vincolante dal app.config, che in determinate circostanze, può causare l'installazione di fallire. Ecco dove utilizzando SC potrebbe ottenere qualche vantaggio, a scapito di non essere in grado di eseguire codice in fase di installazione.

Purtroppo per il PO, TopShelf non esisteva al momento della sua domanda. Esso funziona in tutto le carenze di entrambi SC e InstallUtil, e permette l'avvio del servizio con il debugger quando si inizia in Visual Studio. Inoltre, è molto più facile da digitare myservice install che dover drill-down per la cartella specifica per InstallUtil, o digitare una tonnellata di parametri per SC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top