我没有编写批处理脚本的经验,但我想知道是否有一种方法可以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
如果你觉得这可以用更好的方式完成,那么听听其他建议会很高兴.我总是可以编写服务安装程序,但这不是优先事项.
这是我以前安装的批处理文件.
@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
只做自安装服务更容易.实现此功能后,您可以直接使用(/ 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); } }
您可以使用命令行参数(-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
这是我使用的那个.我发现并使用它.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