用于安装或卸载.NET Windows服务的批处理脚本

Joh*_*sch 17 .net service installer batch-file windows-server-2003

我没有编写批处理脚本的经验,但我想知道是否有一种方法可以installutil.exe使用这样的脚本安装.NET Windows服务,或者卸载服务(如果已经安装),理想情况下我需要某种确认喜欢执行卸载(例如按y卸载).

以下是一些细节:

  • 该服务的.exe位于C:\Program Files\Data Service目录中
  • 该脚本应与服务的.exe位于同一目录中
  • program.log在安装服务后,将一条简单的行添加到日志文件(我们将在此目录中调用它)会很不错
  • 该计算机正在运行Windows Server 2003,并在默认目录中安装了.NET Framework C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

如果你觉得这可以用更好的方式完成,那么听听其他建议会很高兴.我总是可以编写服务安装程序,但这不是优先事项.

Kin*_*nze 32

这是我以前安装的批处理文件.

@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
Run Code Online (Sandbox Code Playgroud)

要卸载,我使用了以下内容:

@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
Run Code Online (Sandbox Code Playgroud)

  • 当我在管理员模式下运行批处理文件时,`PATH`指的是`C:\ Windows\system32\service.exe`而不是文件实际存在的路径,为什么? (3认同)

Ann*_*ram 26

只做自安装服务更容易.实现此功能后,您可以直接使用(/ i或/ u开关)运行服务exe,或者根据需要将调用包装在批处理文件中.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 与必须维护安装项目或批处理脚本相比,此建议要容易得多。 (2认同)
  • 很简单!谢谢 (2认同)
  • 这是我读过的最贴心的帖子之一! (2认同)

VBN*_*ght 14

您可以使用命令行参数(-i -u etc)设置服务exe以支持自我注册/取消注册,而不是编写批处理文件来执行相同的操作.

有关在.NET中创建自安装服务的信息

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

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

同时向解决方案添加安装项目并让Visual Studio构建安装包可能会更快.

如何在Visual Basic .NET或Visual Basic 2005中为Windows服务创建安装项目

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

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

  • 请注意Microsoft删除了Visual Studio 2012中的安装项目类型. (4认同)

小智 6

这是我使用的那个.我发现并使用它.Thanx给创作者..

@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
Run Code Online (Sandbox Code Playgroud)