/// <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服务控制类的更多相关文章

  1. 请高手解释这个C#程序,其中ServiceBase是windows服务基类,SmsService是

    请高手解释这个C#程序,其中ServiceBase是windows服务基类,SmsService是 ServiceBase的子类. static void Main() { ServiceBase[] ...

  2. (40)C#windows服务控制

    ServiceController类 可以使用 ServiceController 类连接到现有服务并控制其行为. 构造函数 1.ServiceController () ServiceControl ...

  3. windows服务控制(开启/停止已有服务)

    #include "stdafx.h" #include <windows.h> #include <tchar.h> #include <strsa ...

  4. windows服务

    .net windows 服务创建.安装.卸载和调试   原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...

  5. .net windows 服务创建、安装、卸载和调试

    原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境 ...

  6. 使用Topshelf组件构建简单的Windows服务

    很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方式也就会不同了.我个人觉得无论学习什么,都应该尝试着去了解 ...

  7. 创建Windows服务

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...

  8. 创建第一个windows服务

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开 ...

  9. Windows服务的安装及配合定时器编写简单的程序

    最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应 ...

随机推荐

  1. UVA 11374 Airport Express(最短路)

    最短路. 把题目抽象一下:已知一张图,边上的权值表示长度.现在又有一些边,只能从其中选一条加入原图,使起点->终点的距离最小. 当加上一条边a->b,如果这条边更新了最短路,那么起点st- ...

  2. centos使用denyhosts的问题,会将自己的IP自动加到hosts.deny的解决办法。

    先吐槽, 很多网站\博客,技术文章也玩伪原创, 害人不浅. 全TMD是COPY, COPY, COPY过来. 拷过来就算了, 你TMD还改了其中的内容... 改成错的.然后众多网站转载, 将错进行到底 ...

  3. Java [Leetcode 122]Best Time to Buy and Sell Stock II

    题目描述: Say you have an array for which the ith element is the price of a given stock on day i. Design ...

  4. 省常中模拟 Test3 Day1

    tile 贪心 题意:给出一个矩形,用不同字母代表的正方形填充,要求相邻的方块字母不能相同,求字典序(将所有行拼接起来)最小的方案. 初步解法:一开始没怎么想,以为策略是每次填充一个尽量大的正方形.但 ...

  5. Oracle中job的使用详解

    我们在项目开发中,常常会有一些复杂的业务逻辑.使用oracle的存储过程,可以大大减少java程序代码的编写工作量,而且存储过程执行在数据库上,这样可以利用oracle的良好性能支持,极大地提高程序执 ...

  6. excel用vlookup,lookup时查询数据需要排序

    如题,排出来的数据不对,之前没有是看清楚..所以记下来,日是后要小心点....

  7. java AES加密算法

    package com.siro.tools; import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import j ...

  8. hdu 2870(dp求最大子矩阵)

    题意:让你求的是由同一字母组成的最大子矩阵,w可以变成a或者b,x可以变成b或者c,y可以变成a或者c,z可以变成a或者b或者c. 分析:这是hdu 1506.hdu 1505的加强版,具体的分析看我 ...

  9. [BILL WEI] stimulsoft 分组页眉页脚的使用

    我们在通过stimulsoft设计报表的时候,有的时候,需要做出如下图报表样式 这个时候,因为箱号是分开扩展的,我们就需要用到分组页眉了,如下图demo跟实例所示:

  10. bzoj 1576 [Usaco2009 Jan]安全路经Travel(树链剖分,线段树)

    [题意] 给定一个无向图,找到1-i所有的次短路经,要求与最短路径的最后一条边不重叠. [思路] 首先用dijkstra算法构造以1为根的最短路树. 将一条无向边看作两条有向边,考察一条不在最短路树上 ...