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操作系统下能完成特定功能的可执行的应 ...
随机推荐
- UVA 11865 Stream My Contest(最小树形图)
题意:N台机器,M条有向边,总资金C,现要到搭建一个以0号机(服务器)为跟的网路,已知每条网线可以把数据从u传递到v,其带宽为d,花费为c,且d越大,传输速度越快,问能够搭建的传输速度最快的网络d值是 ...
- Java [Leetcode 66]Plus One
题目描述: Given a non-negative number represented as an array of digits, plus one to the number. The dig ...
- 基于ffmpeg的流媒体服务器
OS:ubuntu 12.04ffmpeg:N-47141-g4063bb2x264:0.133.2334 a3ac64b目标:使用ffserver建立流媒体服务器使用ffmpeg对本地文件流化(x2 ...
- Linux编译安装Darwin Streaming Server 6.0.3。。。
目前主流的流媒体服务器有微软的windows media server.RealNetworks的Helixserver和苹果公司的Darwin Streaming Server. 微软的window ...
- 她让我懂得了怎样学习Flash
原文:http://www.asv5.cn/blog/article.asp?id=169 最近忙着寻找两样丢失了很久的东西,都是她帮我找回来的,第一样叫做自信,第二样叫做梦想.也正因为有了她,我才从 ...
- android.view.ViewRootImpl$CalledFromWrongThreadException错误处理
一般情况下,我们在编写android代码的时候,我们会将一些耗时的操作,比如网络访问.磁盘访问放到一个子线程中来执行.而这类操作往往伴随着UI的更新操作.比如说,访问网络加载一张图片 new Thre ...
- Spring AOP (上)
工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习.第一:为了更充实自己,保持进步状态.第二:为了提升技术,提高开发能力.第三:保 ...
- Unable to execute dex: method ID not in [0, 0xffff]: 65536
http://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html
- java jvm学习笔记十一(访问控制器)
欢迎装载请说明出处: http://blog.csdn.net/yfqnihao/article/details/8271665 这一节,我们要学习的是访问控制器,在阅读本节之前,如果没有前面几节的 ...
- 【LeetCode 207】Course Schedule
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...