zoukankan      html  css  js  c++  java
  • 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

        可以很容易的看出来,我们只需要一、两条命令即可将我们不想要的服务删除了!

  • 相关阅读:
    C++的预处理(Preprocess)
    【转】深入分析Sleep(0)与Sleep(1)的区别
    【转】两个算法题,感觉挺有意思
    【转】求一个类的sizeof应考虑的问题
    const关键字总结
    C++11各编译器支持情况对比
    【转】C# 创建window服务
    关于C++中char型数组、指针及strcpy函数的细节观察
    用过的shell命令——持续更新
    初试rails 3.1
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/2650495.html
Copyright © 2011-2022 走看看