VS2010 .net Windows服务程序 重复性 注册反注册
编写这种服务程序,调试起来非常的麻烦,而且每次有所变化后,还得频繁的去执行installutil和installutil /u命令,实际上,通过编写一些“生成事件”来大大简化这其中的烦琐工作.这里,我们在“生成事件”里编写如下事件:
“编辑预先生成事件”或“编辑后期生成事件”
if $(ConfigurationName) == Release goto end
if exist "$(ProjectDir)bin\$(TargetFileName)" goto uninstal
if not exist "$(ProjectDir)bin\$(TargetFileName)" goto instal
:uninstal
net stop $(ProjectName)
"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" /u "$(ProjectDir)bin\$(TargetFileName)"
copy "$(TargetDir)" "$(ProjectDir)bin" /y
"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" "$(ProjectDir)bin\$(TargetFileName)"
net start $(ProjectName)
goto end
:instal
copy "$(TargetDir)" "$(ProjectDir)bin" /y
"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" "$(ProjectDir)bin\$(TargetFileName)"
net start $(ProjectName)
goto end
:end
--------------------------------------------------------------
if $(ConfigurationName) == Release goto end
net stop $(ProjectName)
"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" /u $(ProjectDir)bin\$(TargetFileName)
xcopy $(ProjectDir)bin\$(ConfigurationName) $(ProjectDir)bin /s/y
"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" $(ProjectDir)bin\$(TargetFileName)
net start $(ProjectName)
:end
或者通过批处理文件来完成此事:
Install.bat 内容
@ECHO OFF
REM The following directory is for .NET 4.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%
echo Installing WindowsService...
echo ---------------------------------------------------
InstallUtil /i 服务程序.exe
echo ---------------------------------------------------
echo Done.
Uninstall.bat 内容
@ECHO OFF
REM The following directory is for .NET 4.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%
echo Installing WindowsService...
echo ---------------------------------------------------
InstallUtil /u 服务程序.exe
echo ---------------------------------------------------
echo Done.
SC 命令 管理服务
与“服务控制器”和已安装设备进行通讯。SC.exe 检索和设置有关服务的控制信息。可以使用 SC.exe 来测试和调试服务程序。可以设置存储在注册表中的服务属性来控制如何在启动时和作为后台程序运行时启动服务应用程序。SC.exe 的参数可以配置指定的服务,检索当前服务的状态,也可以停止和启动服务。可以生成批处理文件来调用不同的 SC.exe 命令以自动启动或关闭服务序列。SC.exe 提供的功能类似于“控制面板”中“管理工具”项中的“服务”。
打开CMD后,运行SC命令得到如下help信息:
描述:
SC 是用于与服务控制管理器通信的命令行程序。
用法:
sc <server> [command] [service name] <option1> <option2>...
选项 <server> 的格式为 "\\ServerName"
可以键入 "sc [command]"以获得命令的进一步帮助
命令:
query-----------查询服务的状态,或枚举服务类型的状态。
queryex---------查询服务的扩展状态,或枚举服务类型的状态。
start-----------启动服务。
pause-----------发送 PAUSE 控制请求到服务。
interrogate-----发送 INTERROGATE 控制请求到服务。
continue--------发送 CONTINUE 控制请求到服务。
stop------------发送 STOP 请求到服务。
config----------(永久地)更改服务的配置。
description-----更改服务的描述。
failure---------更改服务失败时所进行的操作。
qc--------------查询服务的配置信息。
qdescription----查询服务的描述。
qfailure--------查询失败服务所进行的操作。
delete----------(从注册表)删除服务。
create----------创建服务(将其添加到注册表)。
control---------发送控制到服务。
sdshow----------显示服务的安全描述符。
sdset-----------设置服务的安全描述符。
GetDisplayName--获取服务的 DisplayName。
GetKeyName------获取服务的 ServiceKeyName。
EnumDepend------枚举服务的依存关系。
下列命令不查询服务名称:
sc <server> <command> <option>
boot------------(ok | bad) 表明是否将上一次启动保存为
最后所知的好的启动配置
Lock------------锁定服务数据库
QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
sc start MyService
可以很容易的看出来,我们只需要一、两条命令即可将我们不想要的服务删除了!