【转】如何在命令行脚本中启动带参数的Windows服务
我们有一个自己编写的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服务相关推荐
- linux 重启命令_如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务 | Linux 中国...
服务是必不可少的后台进程,它通常随系统启动,并在关机时关闭.-- Sergiu 服务是必不可少的后台进程,它通常随系统启动,并在关机时关闭.如果你是系统管理员,那么你会定期处理服务.如果你是普通桌面用 ...
- 如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务
服务是必不可少的后台进程,它通常随系统启动,并在关机时关闭.如果你是系统管理员,那么你会定期处理服务.如果你是普通桌面用户,你可能会遇到需要重启服务的情况,例如安装 Barrier 来用于在计算机之间 ...
- 两图说明 java 开发工具中启动类参数都是干嘛的
开发工具中启动类参数都是干嘛的? 之前经常在开发工具中见到配置启动类参数,但从来不清楚是干啥的.实际中在搭建环境中VM options 配置信息比较常见.主要为了设置一些配置信息,比如dubbo的一些 ...
- adb 命令启动带参数的Activity
1.不带参数启动Activity adb shell am start -n com.app.test/.MainActivity adb shell am start com.app.test/.M ...
- SQLAlchemy中模糊查询;JS中POST带参数跳转;JS获取url参数
SQLAlchemy中模糊查询,如何like多个关键字 JS中POST带参数跳转 一个项目中要跳转到另外一个项目,还需要带参数 考虑到安全性的问题,最好是用POST跳转,不能再URL中拼参 所以找到了 ...
- 在命令行cmd中运行带相对路径的py脚本时, 找不到路径的解决方案
症状: 直接运行py文件正常, 在命令行cmd中运行则报错 报错原因: 工作路径 与 脚本文件存放路径不统一 解决方案一: 控制台工作路径切换为文件所在路径: cd py文件所在路径 解决方案二: 在 ...
- C#实现一个用于开机启动其他程序的Windows服务
今天决定写写博客,不为别的,只当自己的积累,如果与此同时能不误导他人甚至给了朋友们一些启发,那真是更好了! 程序的目的和用途: 很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动.windows ...
- 用于退出mysql的命令有,mysql 中启动服务的命令 、登录命令、退出命令 mysql 的常用命令...
1.cmd 以管理员执行 下面命令 启动服务 :net start mysql57 关闭 服务:net stop mysql57 查看mysql 的版本信息 : mysql -V 指定主机地址登录: ...
- java arguments_命令行中执行带参数的java程序(Command-Line Arguments)
在cmd中运行java程序,可以在class名之后输入参数.Eclipse中可点击run configuration,在argument窗口中指定参数.--现学现卖 代码如下: //by panden ...
最新文章
- 看懂三篇文章--需要归纳
- java删除页面数据不刷新_Ajax请求数据与删除数据后刷新页面
- RequestQueue
- CentOS 7 Apache服务的安装与配置(转)
- 易语言神经网络验证码识别_递归神经网络 GRU+CTC+CNN 教会验证码识别
- 马拉松教会我_社区教会了我关于开放组织的知识
- Netbeans 7.1 add android plugin
- 小米盒子 刷系统 参考方法
- Ip2region 离线IP地址定位库
- openfire 开发QQ群、微信群等固定群插件
- Oracle gc等待事件的发现、处理与预防
- 台式计算机连接,台式电脑连接网络步骤
- 06年注册安全工程师试题
- 银河麒麟V10 SP2 server 搭建 ntp服务端
- 《Unity5.x从入门到精通》读书笔记(二)
- 公司股权分配协议 (2)
- 发送内容让Android手机QQ崩溃
- angular4的脏值检测
- 制作iis自动安装包
- 80台无盘服务器配置,80台无盘服务器配置
热门文章
- 蚂蚁S9矿卡ddr型号确认方法
- spark 算子使用类变量_Scala与Spark是天生的一对?
- html 有序无序列表
- 如何创建_重庆市百科如何创建
- 移除span的html,从最后一个span元素的伪元素内容中移除::
- 计算机二级公共知识总结,计算机二级公共基础知识考点总结
- linux c 数组拷贝,C++对数组进行复制 - osc_8iux0cyz的个人空间 - OSCHINA - 中文开源技术交流社区...
- 安卓app开发工具_手机APP开发会涉及到哪些知识点呢?
- 查询数据库现在几个用户在连接
- linux cetos7关闭防火墙