2009-02-24 9 views
14

Non ho esperienza di scrittura di script batch, ma mi chiedevo se esistesse un modo per installare un servizio Windows .NET usando installutil.exe usando tale script, o disinstallare il servizio se è già installato, idealmente con una sorta di conferma che in realtà mi piacerebbe eseguire la disinstallazione (ad esempio, premere y per disinstallare).Batch Script per installare o disinstallare un servizio Windows .NET

Ecco alcuni dettagli:

  • L'eseguibile del servizio si trova nella directory C:\Program Files\Data Service
  • Lo script dovrebbe essere nella stessa directory del file exe per il servizio
  • Sarebbe si consiglia di aggiungere una riga semplice a un file di registro (lo chiameremo program.log, anche in questa directory) dopo l'installazione del servizio
  • La macchina esegue Windows Server 2003 con .NET Framework installato nella directory predefinita C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Se ritieni che questo potrebbe essere fatto in un modo migliore sarebbe bello ascoltare altri suggerimenti. Potrei sempre scrivere un programma di installazione ma questa non è una priorità.

risposta

13

È possibile configurare il servizio EXE per supportare la registrazione/annullamento della registrazione utilizzando gli argomenti della riga di comando (-i -u, ecc.) Invece di scrivere un file batch per fare la stessa cosa.

informazioni sulla creazione autoinstallante Servizi In .NET

http://anotherlab.rajapet.net/2006/06/self-installing-services-in-net.html

http://www.gotnet.biz/WindowsServiceSelfInstaller.ashx

aggiungendo anche un Progetto di installazione alla soluzione e avere Visual Studio costruire un pacchetto di installazione potrebbe essere più veloce.

Come creare un progetto di installazione per un servizio Windows in Visual Basic .NET o Visual Basic 2005

(VB) http://support.microsoft.com/kb/317421

(C#) http://support.microsoft.com/kb/816169

+4

Si noti che Microsoft ha rimosso il tipo di progetto di installazione in Visual Studio 2012. Grazie –

0

Suggerimenti:

  • Fare uso dell'ambiente, Windows non può essere installato su C :. Ma puoi usare% WinDir%.
  • È possibile reindirizzare l'eco per aggiungere un file:

    eco un messaggio >> logfile.txt

  • Tenere traccia di tutto e convering tutti i casi limite può essere impegnativo in cmd.exe, è non è un ambiente ricco.

  • Non c'è un posto coerente per la documentazione. Ma help (dalla riga di comando) su "cmd", "if", "for", "set" e "call" copre gran parte della sintassi avaialble.
  • Imposta echo off all'inizio per vedere i comandi mentre vengono eseguiti.
1

Non sono sicuro del motivo per cui avresti bisogno di un file batch per un solo rivestimento. questo è quello che userei.

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ InstallUtil.exe/i ServiceAssembly.dll

27

Questo è il file batch che ho usato per l'installazione.

@ECHO OFF 

REM The following directory is for .NET 2.0 
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727 
set PATH=%PATH%;%DOTNETFX2% 

echo Installing MyService... 
echo --------------------------------------------------- 
InstallUtil /i MyService.exe 
echo --------------------------------------------------- 
echo Done. 
pause 

disinstallare ho usato il seguente:

@ECHO OFF 

REM The following directory is for .NET 2.0 
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727 
set PATH=%PATH%;%DOTNETFX2% 

echo Uninstalling MyService... 
echo --------------------------------------------------- 
InstallUtil /u MyService.exe 
echo --------------------------------------------------- 
echo Done 
+0

... ha funzionato perfettamente – Lijo

+3

quando ho eseguito il file batch in modalità amministratore del 'path' si riferisce a 'C: \ Windows \ system32 \ service.exe' e non il percorso effettivamente esistente, perché? – Anoop

0

ho fatto con un vecchio file batch stile ....

Copiare l'installutil.exe nella stessa directory del file eseguibile (per semplificare le cose) Di seguito è riportato un esempio generico del contenuto del file batch: (il mio era solo nomi instal.bat)


installutil MyService.exe 
sc config MyService type= interact type= own 
sc failure MyService reset= 6000 actions= restart/5000/restart/5000/restart/5000 
sc start MyService 

Per maggiori informazioni sulle opzioni della riga di comando per installutil.exe, see here.

Per disinstallare il servizio, utilizzare un file batch diverso con il seguente contenuto:


installutil MyService.exe /u 

0

creare un file con estensione .bat e collocarlo nel file

installutil -uc: \ YourServiceLocation \ Service.exe

6

Questo è quello che uso. L'ho trovato e lo uso. Grazie all'autore ..

@echo off 

SET PROG="YourServiceHere.exe" 
SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" 
SET SECONDPART="\InstallUtil.exe" 
SET DOTNETVER=2.0.50727 
    IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install 
SET DOTNETVER=1.1.4322 
    IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install 
SET DOTNETVER=1.0.3705 
    IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install 
GOTO fail 
:install 
    ECHO Found .NET Framework version %DOTNETVER% 
    ECHO Installing service %PROG% 
    %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% 
    GOTO end 
:fail 
    echo FAILURE -- Could not find .NET Framework install 
:param_error 
    echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] 
:end 
    ECHO DONE!!! 
    Pause 
22

È più semplice eseguire solo i servizi di autoinstallazione. Una volta implementato, puoi eseguire direttamente il servizio direttamente con (/ i o/u switch) oppure, se lo desideri, avvolgere la chiamata in un file batch.

static void Main(string[] args) 
{ 
    if (args.Length > 0) 
    { 
     //Install service 
     if (args[0].Trim().ToLower() == "/i") 
     { System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/i", Assembly.GetExecutingAssembly().Location }); } 

     //Uninstall service     
     else if (args[0].Trim().ToLower() == "/u") 
     { System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); } 
    } 
    else 
    { 
     System.ServiceProcess.ServiceBase[] ServicesToRun; 
     ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() }; 
     System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
    } 
} 
+1

Questo suggerimento è molto più semplice di dover gestire progetti di installazione o script batch. – Xorandor

+1

Così semplice! Grazie –

+1

Questo è uno dei post più handiest che ho letto! – Force

4

Ho trovato che è sempre meglio usare un buon progetto di installazione che usi i file batch per installare un'app. Ci sono volte però che ciò non può essere fatto. Diversi progetti al lavoro sono stati scritti nei giorni di Windows NT e all'inizio di Windows XP e utilizzano semplici file batch per l'installazione. Durante quei tempi, convertire il file batch in un'installazione compressa è più un problema che un semplice tweak. Attraverso molte ricerche, ho trovato che http://ss64.com/nt/ è un ottimo riferimento per i file batch di Windows. (Sembra strano, con tutto il nostro progresso nelle tecnologie software, dover scrivere quell'ultima frase.)

In ogni caso, Happy Coding! - indipendentemente dalla "lingua".

0
@echo off 

SET PROG="c:\YourServiceLocation\Service.exe" SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" SET SECONDPART="\InstallUtil.exe" SET DOTNETVER=4.0.30319 IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install 

GOTO fail :install ECHO Found .NET Framework version %DOTNETVER% ECHO Installing service %PROG% %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% GOTO end :fail echo FAILURE -- Could not find .NET Framework install :param_error echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] :end ECHO DONE!!! Pause 

eseguire questo file bat come amministratore