我们有一个自己编写的Windows服务,我们希望该服务在启动时可以根据用户输入的参数实现不同的功能。

要实现这样的需求并不是很难,下面这个例子我用来示范如何编写该服务

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Diagnostics;
 6 using System.Linq;
 7 using System.ServiceProcess;
 8 using System.Text;
 9
10 namespace WindowsServiceSample
11 {
12     public partial class SampleService : ServiceBase
13     {
14         public SampleService()
15         {
16             InitializeComponent();
17         }
18
19         /// <summary>
20         /// 服务启动时触发
21         /// </summary>
22         /// <param name="args">用户可以设置的输入参数</param>
23         protected override void OnStart(string[] args)
24         {
25
26             if (args.Length > 0)
27             {
28                 EventLog.WriteEntry(string.Format("sample service is started with parameter :{0}", string.Join(",", args)));
29             }
30             else
31             {
32                 EventLog.WriteEntry("sample service is started with non parameter");
33             }
34         }
35
36         protected override void OnStop()
37         {
38         }
39     }
40 }

在上述代码中,我区分了带参数启动和不带参数启动两种情况。很显然,在带参数的那种情况下,我们可以根据参数做不同的处理。本文仅为了说明参数问题,并不真的去考虑那些实际应用。我通过写日志的方式来区分即可。

这个服务安装起来之后,在服务控制台中看起来是这样的

如果我们通过手工去启动的话,如何设置参数呢?很简单,双击该服务,在属性对话框中输入参数即可

【注意】是先输入参数,然后点击“Start”

【注意】不同的参数之间用空格隔开

启动成功后,我们在事件日志中可以看到一条日志

这说明,参数确实被捕捉到了。服务正常进行了工作。

还不错对吧?但本文的最大目的并不是解释这个,上面都是铺垫,如果我们是要通过命令行脚本的方式来启动服务,而不是手工启动服务,那么该如何设置参数呢?

我们都知道要在命令行中启动服务,一般都是通过net start命令。这个工具的格式如下

我们可以通过net start sampleservice启动服务

在事件日志中确实看到它是没有带参数启动的

好吧,那么如何传递参数过去呢?

经过研究发现,net 工具要传递参数的话,有一个很特殊的做法

net start sampleservice /a /b /c /d

但是这样启动之后,看日志却发现有一点点特殊

请主要,参数确实传递进来了。但包含了“/”。如果说在程序中识别这个特殊的符号,那么也是没有问题的。只不过,这样就未必是增加了程序的复杂性啦。

那么,有没有更加简单的做法呢?(简单的意思是说与手工操作是一样的,不需要为此去修改代码)

我想起来,除了用net start之外,还可以通过sc start命令来启动服务

这样的命令就直观多了。我们马上来看一下日志文件中的结果吧

很好,这是我们需要的效果。也就是说用sc工具的话,可以很好地传递参数。

【备注】sc的意思是,service controller,关于该工具的详细介绍,请参考 http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true

转载于:https://www.cnblogs.com/chriskwok/p/6978015.html

【转】如何在命令行脚本中启动带参数的Windows服务相关推荐

  1. linux 重启命令_如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务 | Linux 中国...

    服务是必不可少的后台进程,它通常随系统启动,并在关机时关闭.-- Sergiu 服务是必不可少的后台进程,它通常随系统启动,并在关机时关闭.如果你是系统管理员,那么你会定期处理服务.如果你是普通桌面用 ...

  2. 如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务

    服务是必不可少的后台进程,它通常随系统启动,并在关机时关闭.如果你是系统管理员,那么你会定期处理服务.如果你是普通桌面用户,你可能会遇到需要重启服务的情况,例如安装 Barrier 来用于在计算机之间 ...

  3. 两图说明 java 开发工具中启动类参数都是干嘛的

    开发工具中启动类参数都是干嘛的? 之前经常在开发工具中见到配置启动类参数,但从来不清楚是干啥的.实际中在搭建环境中VM options 配置信息比较常见.主要为了设置一些配置信息,比如dubbo的一些 ...

  4. adb 命令启动带参数的Activity

    1.不带参数启动Activity adb shell am start -n com.app.test/.MainActivity adb shell am start com.app.test/.M ...

  5. SQLAlchemy中模糊查询;JS中POST带参数跳转;JS获取url参数

    SQLAlchemy中模糊查询,如何like多个关键字 JS中POST带参数跳转 一个项目中要跳转到另外一个项目,还需要带参数 考虑到安全性的问题,最好是用POST跳转,不能再URL中拼参 所以找到了 ...

  6. 在命令行cmd中运行带相对路径的py脚本时, 找不到路径的解决方案

    症状: 直接运行py文件正常, 在命令行cmd中运行则报错 报错原因: 工作路径 与 脚本文件存放路径不统一 解决方案一: 控制台工作路径切换为文件所在路径: cd py文件所在路径 解决方案二: 在 ...

  7. C#实现一个用于开机启动其他程序的Windows服务

    今天决定写写博客,不为别的,只当自己的积累,如果与此同时能不误导他人甚至给了朋友们一些启发,那真是更好了! 程序的目的和用途: 很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动.windows ...

  8. 用于退出mysql的命令有,mysql 中启动服务的命令 、登录命令、退出命令 mysql 的常用命令...

    1.cmd 以管理员执行 下面命令 启动服务 :net start mysql57 关闭 服务:net stop mysql57 查看mysql 的版本信息 : mysql -V 指定主机地址登录: ...

  9. java arguments_命令行中执行带参数的java程序(Command-Line Arguments)

    在cmd中运行java程序,可以在class名之后输入参数.Eclipse中可点击run configuration,在argument窗口中指定参数.--现学现卖 代码如下: //by panden ...

最新文章

  1. 看懂三篇文章--需要归纳
  2. java删除页面数据不刷新_Ajax请求数据与删除数据后刷新页面
  3. RequestQueue
  4. CentOS 7 Apache服务的安装与配置(转)
  5. 易语言神经网络验证码识别_递归神经网络 GRU+CTC+CNN 教会验证码识别
  6. 马拉松教会我_社区教会了我关于开放组织的知识
  7. Netbeans 7.1 add android plugin
  8. 小米盒子 刷系统 参考方法
  9. Ip2region 离线IP地址定位库
  10. openfire 开发QQ群、微信群等固定群插件
  11. Oracle gc等待事件的发现、处理与预防
  12. 台式计算机连接,台式电脑连接网络步骤
  13. 06年注册安全工程师试题
  14. 银河麒麟V10 SP2 server 搭建 ntp服务端
  15. 《Unity5.x从入门到精通》读书笔记(二)
  16. 公司股权分配协议 (2)
  17. 发送内容让Android手机QQ崩溃
  18. angular4的脏值检测
  19. 制作iis自动安装包
  20. 80台无盘服务器配置,80台无盘服务器配置

热门文章

  1. 蚂蚁S9矿卡ddr型号确认方法
  2. spark 算子使用类变量_Scala与Spark是天生的一对?
  3. html 有序无序列表
  4. 如何创建_重庆市百科如何创建
  5. 移除span的html,从最后一个span元素的伪元素内容中移除::
  6. 计算机二级公共知识总结,计算机二级公共基础知识考点总结
  7. linux c 数组拷贝,C++对数组进行复制 - osc_8iux0cyz的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 安卓app开发工具_手机APP开发会涉及到哪些知识点呢?
  9. 查询数据库现在几个用户在连接
  10. linux cetos7关闭防火墙