最近在做一个大型项目的时候,需要window服务来做扫表倒表,但是又最好能够随时远程登录后控制,并且可以传递一些参数进去让windows服务与外界有些交互,并得到控制,于是,自己研究了一番,现在,把一些体会拿来跟大家一起体会。
在C# 中使用一个System.ServiceProcess 命名空间下的ServiceControl 来对windows服务进行控制,其实在底层是SCM(service control manager)。
咱们开始来一步一步操作。
第一步 :添加一个引用,System.ServiceProcess




第二步:从vs2005的服务器资源管理器来拖动一个服务示例到设计界面。


第三步:编写控制服务的代码
当把一个服务拖动到设计界面的时候,就创建了一个基于某个服务的服务控制组件实例,ServiceControl1,
此实例有许多方法可以控制服务的状态,以及执行自定义命令,执行自定义命令要注意的一点就是命令只能传递一个int类型的参数,而且这个参数有限制大于128,小于256,就是这个限制条件害得我郁闷了好久,我一直传递的1,2,3之类的参数,老是说报错。。。。最后在google中的代码搜索中找到了答案。
当然在windows服务里面你需要重写一个方法,示例如下:
protected override void OnCustomCommand(int command)
        {
            if (command == 100)
            {
                StreamWriter sw = new StreamWriter(@"C:\xx.txt", true);
                sw.WriteLine("command is "+command+"  " + DateTime.Now.ToString());
                sw.Close();
            }
            else if (command == 200)
            {
                StreamWriter sw = new StreamWriter(@"C:\xx.txt", true);
                sw.WriteLine("command is "+command +" "+ DateTime.Now.ToString());
                sw.Close();
            }
        }
代码的其他部分就没有什么好说的了,点击这里<a target=blank src='https://files.cnblogs.com/FrameWork/WindowsApplication1.rar'>下载示例代码</a>