代码之家  ›  专栏  ›  技术社区  ›  John Rasch

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

  •  16
  • John Rasch  · 技术社区  · 16 年前

    installutil.exe 使用这样的脚本,或者卸载已安装的服务,最好是确认我确实希望执行卸载(例如,按y键卸载)。

    以下是一些细节:

    • 服务的.exe位于 C:\Program Files\Data Service 目录
    • 脚本应与服务的.exe位于同一目录中
    • 最好在日志文件中添加一行简单的代码(我们称之为 program.log ,也在此目录中)安装服务后
    • 计算机正在运行Windows Server 2003,默认目录中安装了.NET Framework C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

    如果你觉得这可以做得更好,那就听听其他的建议吧。我可以随时编写服务安装程序,但这不是优先事项。

    10 回复  |  直到 16 年前
        1
  •  32
  •   Kinze    16 年前

    这是我用来安装的批处理文件。

    @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
    
        2
  •  26
  •   Annagram    14 年前

    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);
        }
    }
    
        3
  •  15
  •   VBNight    16 年前

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

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

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

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

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

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

        4
  •  6
  •   animuson    14 年前

    这是我用的。我找到并使用了它。感谢造物主。。

    @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
    
        5
  •  4
  •   iKevin    13 年前

    我发现使用一个好的安装项目总是比使用批处理文件来安装应用程序更好。但有时这是做不到的。有几个项目是在WindowsNT和早期WindowsXP时代编写的,使用简单的批处理文件进行安装。在这些时候,将批处理文件转换为安装打包文件比简单的调整更麻烦。通过大量的搜索,我发现 http://ss64.com/nt/ 是一个很好的Windows批处理文件参考。(随着我们在软件技术方面的进步,不得不写下最后一句话,感觉很奇怪。)

        6
  •  2
  •   Al W    16 年前

    我不知道为什么一行程序需要批处理文件。这就是我要用的。

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

        7
  •  0
  •   Richard    16 年前

    • 利用环境,Windows可能未安装在C:。但您可以使用%WinDir%。
    • 您可以重定向echo以附加到文件:

      回显消息>&燃气轮机;logfile.txt

    • 在cmd.exe中,跟踪所有内容并转换所有边缘情况可能是一项挑战,因为它不是一个丰富的环境。

    • 在开始时设置echo off,以便在执行命令时查看命令。
        8
  •  0
  •   Oscar Cabrero    16 年前

    创建一个扩展名为.bat的文件,并将其放入文件中

        9
  •  0
  •   Valamas ConsultUtah    13 年前

    我用一个老式的批处理文件做了这个。。。。

    将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 
    

    see here .

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


    installutil MyService.exe /u
    

        10
  •  0
  •   Jaroslav Kadlec    11 年前
    @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