心影(LM)

导航

Windows Service 创建 发布

1.创建,根据条件筛选,找不到直接搜索框搜

 

 

 

 

2.找到 Program.cs   这是主文件,里面的Main方法是主入口,看看就行了,现在没用

 

 

 

3.找到Service1.cs文件右键  ”查看代码“   进来三个方法1.Service1本身构造函数    2. protected override void OnStart(string[] args)//启动时候执行的    3. protected override void OnStop()//结束时候执行的

   现在在里面分别写上创建文件的语句用来观察一会执行之后的效果   

using System.IO; 
 /// <summary>
        /// 启动时执行
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            File.Create(AppDomain.CurrentDomain.BaseDirectory+"OnStaart.text");
        }
        /// <summary>
        /// 结束时执行
        /// </summary>
        protected override void OnStop()
        {
            File.Create(AppDomain.CurrentDomain.BaseDirectory + "OnStop.text");
        }

 

 

 

 

 

4.右键编译一下,一般会在根目录bin文件里面生成debug文件里面会有三个文件还包含exe执行文件

5.打开cmd操作台   输入    sc   回车查看,这个输出的就是这个命令的用法

C:\Users\Administrator>sc
描述:
        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---------更改失败时服务执行的操作。
          failureflag-----更改服务的失败操作标志。
          sidtype---------更改服务的服务 SID 类型。
          privs-----------更改服务的所需特权。
          managedaccount--更改服务以将服务帐户密码
                          标记为由 LSA 管理。
          qc--------------查询服务的配置信息。
          qdescription----查询服务的描述。
          qfailure--------查询失败时服务执行的操作。
          qfailureflag----查询服务的失败操作标志。
          qsidtype--------查询服务的服务 SID 类型。
          qprivs----------查询服务的所需特权。
          qtriggerinfo----查询服务的触发器参数。
          qpreferrednode--查询服务的首选 NUMA 节点。
          qmanagedaccount-查询服务是否将帐户
                          与 LSA 管理的密码结合使用。
          qprotection-----查询服务的进程保护级别。
          quserservice----查询用户服务模板的本地实例。
          delete ----------(从注册表中)删除服务。
          create----------创建服务(并将其添加到注册表中)。
          control---------向服务发送控制。
          sdshow----------显示服务的安全描述符。
          sdset-----------设置服务的安全描述符。
          showsid---------显示与任意名称对应的服务 SID 字符串。
          triggerinfo-----配置服务的触发器参数。
          preferrednode---设置服务的首选 NUMA 节点。
          GetDisplayName--获取服务的 DisplayName。
          GetKeyName------获取服务的 ServiceKeyName。
          EnumDepend------枚举服务依赖关系。

        以下命令不需要服务名称:
        sc <server> <command> <option>
          boot------------(ok | bad)指示是否应将上一次启动另存为
                          最近一次已知的正确启动配置
          Lock------------锁定服务数据库
          QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
        sc start MyService


QUERY 和 QUERYEX 选项:
        如果查询命令带服务名称,将返回
        该服务的状态。其他选项不适合这种
        情况。如果查询命令不带参数或
        带下列选项之一,将枚举此服务。
    type=    要枚举的服务的类型(driver, service, userservice, all)
             (默认 = service)
    state=   要枚举的服务的状态 (inactive, all)
             (默认 = active)
    bufsize= 枚举缓冲区的大小(以字节计)
             (默认 = 4096)
    ri=      开始枚举的恢复索引号
             (默认 = 0)
    group=   要枚举的服务组
             (默认 = all groups)

语法示例
sc query                - 枚举活动服务和驱动程序的状态
sc query eventlog       - 显示 eventlog 服务的状态
sc queryex eventlog     - 显示 eventlog 服务的扩展状态
sc query type= driver   - 仅枚举活动驱动程序
sc query type= service  - 仅枚举 Win32 服务
sc query state= all     - 枚举所有服务和驱动程序
sc query bufsize= 50    - 枚举缓冲区为 50 字节
sc query ri= 14         - 枚举时恢复索引 = 14
sc queryex group= ""    - 枚举不在组内的活动服务
sc query type= interact - 枚举所有不活动服务
sc query type= driver group= NDIS     - 枚举所有 NDIS 驱动程序


C:\Users\Administrator>sc Create
描述:
        在注册表和服务数据库中创建服务项。
用法:
        sc <server> create [service name] [binPath= ] <option1> <option2>...

选项:
注意: 选项名称包括等号。
      等号和值之间需要一个空格。
 type= <own|share|interact|kernel|filesys|rec|userown|usershare>
       (默认 = own)
 start= <boot|system|auto|demand|disabled|delayed-auto>
       (默认 = demand)
 error= <normal|severe|critical|ignore>
       (默认 = normal)
 binPath= <.exe 文件的 BinaryPathName>
 group= <LoadOrderGroup>
 tag= <yes|no>
 depend= <依存关系(以 / (斜杠)分隔)>
 obj= <AccountName|ObjectName>
       (默认= LocalSystem)
 DisplayName= <显示名称>
 password= <密码>

6.现在发布  输入   sc Create MyService binpath="C:\Users\Administrator\Desktop\新建文件夹\源码0628\BPM.WindowsService1\BPM.WindowsService1\bin\Debug\BPM.WindowsService1.exe"  start=auto

 然后回车提示  [SC] CreateService 成功   就是发布成功了   然后就去电脑的服务里面看有没有服务这个东西名字叫   MyService,这个名字在上面随便起想叫啥叫啥   后面跟的是编译后的可执行exe文件,一般情况下这个服务就算是发布完事了,查看去任务管理器找一下就能看到了。但是不是一直循环的。

 

 

 

 

 注意:删除服务   C:\Users\Administrator>sc  delete MyService     直接后面加上服务名字就行,看到下面提示  [SC] DeleteService 成功  就算成功了

 

7.单机Service1.cs==》serviceProcessInstaller1点击右键属性==》属性找到Account修改成LocalSystem    这一步代表服务发布后会跟随电脑开关机启动关闭

 

 8.单机Service1.cs==》serviceInstaller1点击右键属性==》属性找到2.serviceName这个是改变服务的名字的和之前操作黑窗口指定名字一个意思,黑窗口优先级更高;StartType是启动类型如果想使用Automatic(随着计算机开关)这个类型的话必须设置上面的第七步   

 

 

 

 9.第二种发布服务方式,编译时候要注意使用64位版本发布,没有的话去系统里面添加注册表,使用第一种安装方式有一定风险,关机后可能不存在,自己尝试吧  我没试,这种肯定是存在的

安装Install Service:

C:\Windows\system32>InstallUtil.exe C:\Users\yubao\Documents\Visual Studio 2017\Projects\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe

卸载Uninstall Service:

 

C:\Windows\system32>InstallUtil.exe /u  "C:\Users\yubao\Documents\Visual Studio 2017\Projects\WindowsService1\WindowsService1\bin\x64\Release\WindowsService1.exe"  

 

10.第三种安装方式,就直接借鉴这个大神的吧  用exe形式进行安装Setup没有的自己找找组件扩展 不行百度搜去

Use Setup Project to Install windows service

 

 

Build Setup Project to generate Installer files:

 

Double click "Setup.exe/msi" to start installation. And then you will see this typicall error for x64 target platform: ( for win32, you will never see this error)

 

How to solve E1001 under x64 target system:

Download orca.exe from ORCA MSI Editor Standalone Download

Orca MSI Editor allows you to edit the properties of any MSI file. With this tool, you can change the title and text within the installer an look at how and where the files are delivered. It’s also handy if you need to “hack” an MSI to work with a newer version of Windows.

 

Edit .msi file with "orca.exe " tool:

 

modify binary path to  "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtilLib.dll"

 

 

 

 

 

Final install path:

 

 

posted on 2021-11-02 16:58  心影(LM)  阅读(199)  评论(0编辑  收藏  举报