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

时间:2009-02-24 18:16:37

标签: .net installer service 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

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

10 个答案:

答案 0 :(得分:31)

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

@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

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

@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

答案 1 :(得分:24)

只需制作自行安装服务即可。实现之后,您可以直接使用(/ 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);
    }
}

答案 2 :(得分:13)

您可以使用命令行参数(-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

答案 3 :(得分: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

答案 4 :(得分:4)

我发现使用一个好的安装项目来使用批处理文件来安装应用程序总是更好。有时虽然无法完成。工作中的几个项目是在Windows NT和早期Windows XP时代编写的,并使用简单的批处理文件进行安装。在这段时间内,将批处理文件转换为安装包装比简单的调整更麻烦。通过大量搜索,我发现http://ss64.com/nt/是一个非常好的Windows批处理文件引用。 (我们在软件技术方面取得的所有进步,感觉很奇怪,不得不写下最后一句话。)

无论如何,快乐编码! - 不管"语言"。

答案 5 :(得分:2)

我不确定为什么你需要一个单行班的批处理文件。这就是我使用的。

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

答案 6 :(得分:0)

建议:

  • 利用环境,Windows可能无法安装在C:上。但是你可以使用%WinDir%。
  • 您可以重定向回显以附加到文件:

    回显消息>> LOGFILE.TXT

  • 跟踪所有内容并收集所有边缘案例在cmd.exe中可能具有挑战性,但它不是一个丰富的环境。

  • 文档没有一致的位置。但是对于“cmd”,“if”,“for”,“set”和“call”的帮助(来自命令行)涵盖了很多可用的语法。
  • 在开始时设置echo off以查看执行时的命令。

答案 7 :(得分:0)

我用一个老式的批处理文件做到了....

将installutil.exe复制到与可执行文件相同的目录中(以简化操作)以下是必要的批处理文件内容的一般示例:(我的名字只是名字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 

有关installutil.exe的命令行选项的更多信息,请see here

要卸载服务,请使用包含以下内容的其他批处理文件:


installutil MyService.exe /u

答案 8 :(得分:0)

创建扩展名为.bat的文件并将其放在文件

installutil -u c:\ YourServiceLocation \ Service.exe

答案 9 :(得分: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

以管理员身份运行此bat文件