wake-up-neo.com

Batch-Skript zum Installieren oder Deinstallieren eines .NET-Windows-Dienstes

Ich habe keine Erfahrung mit dem Schreiben von Batch-Skripts, aber ich habe mich gefragt, ob es einen Weg gibt, einen .NET-Windows-Dienst mithilfe von installutil.exe mit einem solchen Skript zu installieren oder den Dienst zu deinstallieren, falls er bereits installiert ist möchte die Deinstallation durchführen (z. B. y zur Deinstallation drücken).

Hier sind einige Details:

  • Die .exe für den Dienst befindet sich im Verzeichnis C:\Program Files\Data Service
  • Das Skript sollte sich in demselben Verzeichnis befinden wie die EXE-Datei für den Dienst
  • Es wäre schön, einer Protokolldatei eine einfache Zeile hinzuzufügen (wir nennen sie program.log, auch in diesem Verzeichnis), nachdem der Dienst installiert wurde
  • Auf dem Computer wird Windows Server 2003 ausgeführt, auf dem .NET Framework im Standardverzeichnis C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 installiert ist.

Wenn Sie der Meinung sind, dass dies besser möglich wäre, wäre es schön, andere Vorschläge zu hören. Ich könnte immer einen Service Installer schreiben, aber das hat keine Priorität.

16
John Rasch

Sie können Ihren Service-Exe so einrichten, dass er die Selbstregistrierung aufhebung mithilfe von Befehlszeilenargumenten (-i -u usw.) unterstützt, anstatt eine Batchdatei zu schreiben, um dasselbe zu tun.

Informationen zum Erstellen selbstinstallierender Dienste in .NET

/ - http://anotherlab.rajapet.net/2006/06/selbstinstallationsservices-in-net.html

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

Das Hinzufügen eines Setup-Projekts zu Ihrer Lösung und das Erstellen eines Installationspakets durch Visual Studio sind möglicherweise schneller.

Erstellen eines Setup-Projekts für einen Windows-Dienst in Visual Basic .NET oder in Visual Basic 2005

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

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

13
VBNight

Dies sind die Batch-Dateien, die ich zur Installation verwendet habe.

@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

Zur Deinstallation habe ich Folgendes verwendet:

@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
30
Kinze

Es ist einfacher, selbstinstallierende Dienste zu erstellen. Wenn Sie dies implementiert haben, können Sie den Dienst exe entweder direkt mit der Befehlszeilenoption (/ i oder/u) ausführen oder den Anruf in eine Batchdatei packen, wenn Sie möchten.

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);
    }
}
24
Annagram

Das ist das, was ich benutze. Ich habe es gefunden und benutze es. Danke an den Schöpfer ..

@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
6
Jos

Ich habe festgestellt, dass es immer besser ist, ein gutes Installationsprojekt zu verwenden, um Batchdateien für die Installation einer App zu verwenden. Es gibt jedoch Zeiten, in denen dies nicht möglich ist. In den Tagen von Windows NT und frühen Windows XP wurden mehrere Projekte geschrieben, die zur Installation einfache Batchdateien verwenden. In diesen Zeiten ist das Konvertieren der Batch-Datei in eine gepackte Installation mehr Probleme als ein einfacher Tweak. Durch langes Suchen habe ich herausgefunden, dass http://ss64.com/nt/ eine sehr gute Windows-Batch-Datei ist. (Es fühlt sich einfach seltsam an, mit all unseren Fortschritten in Softwaretechnologien diesen letzten Satz zu schreiben.)

Wie auch immer, Happy Coding! - unabhängig von der "Sprache".

4
iKevin

ich bin mir nicht sicher, warum Sie eine Batch-Datei für einen One-Liner benötigen. das ist was ich verwenden würde.

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

2
Al W

Vorschläge:

  • Verwenden Sie die Umgebung, Windows kann nicht auf C: installiert werden. Sie können jedoch% WinDir% verwenden.
  • Sie können das Echo umleiten, um es an eine Datei anzuhängen:

    echo Eine Nachricht >> logfile.txt

  • Wenn Sie den Überblick behalten und alle Edge-Fälle zusammenführen, kann dies mit cmd.exe eine Herausforderung darstellen. Es ist keine reiche Umgebung.

  • Es gibt keinen einheitlichen Ort für die Dokumentation. Hilfe (von der Kommandozeile) über "cmd", "if", "for", "set" und "call" deckt einen Großteil der verfügbaren Syntax ab.
  • Schalten Sie das Echo beim Start aus, um die Befehle während der Ausführung zu sehen.
0
Richard

Ich habe das mit einer altmodischen Batchdatei gemacht ....

Kopieren Sie die Datei installutil.exe in das gleiche Verzeichnis wie Ihre ausführbare Datei (um die Sache zu vereinfachen). Nachfolgend wird ein allgemeines Beispiel für den Inhalt der Batchdatei angegeben: (Mein Name war nur die Namen 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 

Weitere Informationen zu Befehlszeilenoptionen für "installutil.exe" finden Sie unter hier .

Verwenden Sie zum Deinstallieren des Dienstes eine andere Stapeldatei mit folgendem Inhalt:


installutil MyService.exe /u

0
David

erstellen Sie eine Datei mit der Erweiterung .bat und legen Sie diese in der Datei ab

installutil -u c:\YourServiceLocation\Service.exe

0
Oscar Cabrero
@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

führen Sie diese Bat-Datei als Administrator aus 

0
chevhfghfghfgh