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:
C:\Program Files\Data Service
program.log
, auch in diesem Verzeichnis), nachdem der Dienst installiert wurdeC:\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.
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
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
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);
}
}
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
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".
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
Vorschläge:
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.
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
erstellen Sie eine Datei mit der Erweiterung .bat und legen Sie diese in der Datei ab
installutil -u c:\YourServiceLocation\Service.exe
@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