最近写了好多次进程守护程序,今天在这里总结一下。
用到的知识点:
1、在程序中启动进程,
2、写Windows服务,
3、以及在Windows服务中启动带界面的程序
关于第三点的问题,我在我的上一篇博客单独介绍了解决方案:C#做服务使用Process启动外部程序没有界面
这里主要讲述怎样用C#做一个服务这个服务可以监视某个进程,如果进程不存在则启动这个进程(还可以通过让监视程序和进程守护服务定期交换数据的方法来更准确的进行监测)
新建Windows服务项目
实现服务要执行的操作
查看services代码,在对应位置写入要执行的代码:
protected override void OnStart(string[] args)
{
//服务开启执行代码
}
protected override void OnStop()
{
//服务结束执行代码
}
protected override void OnPause()
{
//服务暂停执行代码
base.OnPause();
}
protected override void OnContinue()
{
//服务恢复执行代码
base.OnContinue();
}
protected override void OnShutdown()
{
//系统即将关闭执行代码
base.OnShutdown();
}
添加安装程序
1、在services的设计界面右键,选择添加安装程序:
生成serviceInstaller1和 serviceProcessInstaller1两个组件 。
2、把serviceInstaller1的属性ServiceName改写为你的服务程序名,并把启动模式设置为AUTOMATIC
3、把serviceProcessInstaller1的属性account改写为 LocalSystem
4、最后通过从生成菜单中选择生成来生成项目
安装卸载Windows服务
如果你在你需要的函数里面写过你需要的方法后,直接点运行是不可运行的。
1、安装Windows服务
安装命令:InstallUtil.exe MyServiceLog.exe
InstallUtil存在路径为:C:WINDOWSMicrosoft.NETFramework.NET版本号
复制C:WINDOWSMicrosoft.NetFramework版本号 路径中的InstallUtil.exe 到bin/debug或bin/release文件夹中
在命令行窗口中(管理员权限打开),cd到服务Debug目录下运行安装命令,安装过程如下图所示:
安装成功之后手动启动服务:
2、卸载window 服务
命令:InstallUtil.exe MyServiceLog.exe /u
如果修改这个服务,但是路径没有变化的话是不需要重新注册服务的,直接停止服务,然后用新的文件覆盖原来的文件即可,如果路径发生变化,应该先卸载这个服务,然后重新安装这个服务。