当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《用于安装或卸载.NETWindows服务的批处理脚本》经验,为你挑选了4个好方法。

我没有编写批处理脚本的经验,但我想知道是否有一种方法可以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

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



1> Kinze..:

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

@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


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

2> Annagram..:

只做自安装服务更容易.实现此功能后,您可以直接使用(/ 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);
    }
}


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

3> VBNight..:

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

这是我使用的那个.我发现并使用它.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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有