windows服务控制类
/// <summary>
/// 服务调用控制
/// </summary>
public class WinServiceController
{ /// <summary>
/// 服务开始启用
/// </summary>
/// <typeparam name="T">服务调用的类型</typeparam>
/// <param name="ServiceName">服务的名称</param>
/// <param name="args">应用程序启动传入的参数</param>
public static void State<T>(string ServiceName, string[] args)
where T : ServiceBase, IServiceController, new()
{
string key0 = AppDomain.CurrentDomain.FriendlyName;
if (args.Length > )
{
string str = args[].ToLower();
try
{
if (str == "-install" || str == "-i")
{
#region //安装本服务
if (null == ServiceIsExisted(ServiceName))
{//如果没有安装,则安装
string key = AppDomain.CurrentDomain.BaseDirectory + key0;
ManagedInstallerClass.InstallHelper(new string[] { key });
ServiceController c = new ServiceController(key0.Substring(, key0.Length - ));
c.Start();
}
else
{
Log.Write("服务已经安装!无需再安装!");
}
#endregion
}
else if (str == "-uninstall" || str == "-u")
{
#region //卸载本服务
ServiceController sc = ServiceIsExisted(ServiceName);
if (null != sc)
{//如果已经安装,则卸载本服务
if (sc.Status != ServiceControllerStatus.Stopped)
{
sc.Stop();//停止服务
sc.WaitForStatus(ServiceControllerStatus.Stopped);//等待服务完全停止;真方便的函数~
}
string key = AppDomain.CurrentDomain.BaseDirectory + AppDomain.CurrentDomain.FriendlyName;
ManagedInstallerClass.InstallHelper(new string[] { "/u", key });
}
else
{
Log.Write("服务未安装!不能卸载不存在的服务!");
}
#endregion
}
else if (str == "-start" || str == "-s")
{
#region //将本服务当做一个应用程序直接运行
Log.Write("消息服务启动开始");
T msm = null;
try
{
msm = new T();
msm.Start();
}
catch (Exception msg)
{
if (null != msm)
{
msm.Stop();
}
}
#endregion
}
}
catch (Exception msg)
{
Log.Write(msg.Message + msg.StackTrace);
Log.Write("消息服务异常结束");
}
}
else
{
#region //启动本服务
try
{
ServiceBase.Run(new T());
}
catch (Exception msg)
{
Log.Write(msg.Message + msg.StackTrace);
Log.Write("消息服务异常结束");
}
#endregion
} } /// <summary>
/// 检查指定的服务是否存在。
/// </summary>
/// <param name="serviceName">要查找的服务名字</param>
/// <returns>如果存在则返回真</returns>
private static ServiceController ServiceIsExisted(string svcName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName == svcName)
{
return s;
}
}
return null;
}
}
调用:
在windows服务应用程序中的Program文件
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
public static void Main(string[] args)
{
WinServiceController.State<Service1>("windows服务应用程序exe名称", args);
}
}
使用工具安装,运行,停止,卸载Window服务
http://www.cnblogs.com/yanweidie/p/3542670.html
windows服务控制类的更多相关文章
- 请高手解释这个C#程序,其中ServiceBase是windows服务基类,SmsService是
请高手解释这个C#程序,其中ServiceBase是windows服务基类,SmsService是 ServiceBase的子类. static void Main() { ServiceBase[] ...
- (40)C#windows服务控制
ServiceController类 可以使用 ServiceController 类连接到现有服务并控制其行为. 构造函数 1.ServiceController () ServiceControl ...
- windows服务控制(开启/停止已有服务)
#include "stdafx.h" #include <windows.h> #include <tchar.h> #include <strsa ...
- windows服务
.net windows 服务创建.安装.卸载和调试 原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...
- .net windows 服务创建、安装、卸载和调试
原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境 ...
- 使用Topshelf组件构建简单的Windows服务
很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方式也就会不同了.我个人觉得无论学习什么,都应该尝试着去了解 ...
- 创建Windows服务
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...
- 创建第一个windows服务
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开 ...
- Windows服务的安装及配合定时器编写简单的程序
最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应 ...
随机推荐
- UVALive 3211 Now or later(2-sat)
2-sat问题,一种在两种可能性中选择必然关系的问题. 推荐两篇论文,也是学2-sat公认比较好的材料.前者较好理解,后者需耐心看. http://www.google.com.hk/url?sa=t ...
- wdcp系统升级mysql5.7.11
1.下载解压 下载地址为:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz ...
- ffmpeg/ffplay vc6 源码剖析
ffmpeg/ffplay是当今多媒体领域的王者,很多很多的人想研究学习ffmpeg/ffplay,但苦于ffmpeg/ffplay庞大的代码量,令人望而生畏.为帮助更多的人研习ffmpeg/ffpl ...
- Shell中取时间格式方法
Shell中取时间格式方法2007-09-13 15:35常用date的显示格式: date +%F //2007-03-06date +%Y%m%d//20070306 date +%T //23: ...
- Spring学习之Ioc
Ioc原理讲解:http://www.cnblogs.com/xdp-gacl/p/4249939.html Ioc IoC是一种编程思想,由主动编程变为被动接收. 也就是说,所有的组件都是被动的(p ...
- JS动态呈现还可以输入字数
现在觉得当我们使用js或者jquery来呈现一个动态效果时,主要还是要想清楚它的思想.它的原理.而动态呈现输入字数,其实就是给它设置一个最大输入字数,然后获取已输入的字数,自然想做什么都可以. < ...
- [Everyday Mathematics]20150109
设 $A$ 是 $n$ 阶复方阵, 其特征多项式为 $$\bex f(\lm)=(\lm-\lm_1)^{n_1}\cdots(x-\lm_s)^{n_s}, \eex$$ 其中 $\lm_i$ 互不 ...
- HDU5758 Explorer Bo 树形dp
我是参考这一篇写的:http://blog.csdn.net/fsss_7/article/details/52049474 一点感想:dp[i][0]代表以这个点为根的且总叶子数为偶数个叶子的答案 ...
- C/C++:作用域、可见性与生存期
作用域 作用域是用来表示某个标识符在什么范围内有效. C++的作用域主要有四种:函数原型作用域.块作用域.类作用域和文件作用域. 由大到小:文件作用域>类作用域>块作用域>函数原型作 ...
- Python之正则
从学习Python至今,发现很多时候是将Python作为一种工具.特别在文本处理方面,使用起来更是游刃有余. 说到文本处理,那么正则表达式必然是一个绝好的工具,它能将一些繁杂的字符搜索或者替换以非常简 ...