前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows服务控制类

windows服务控制类

作者头像
跟着阿笨一起玩NET
发布2018-09-19 16:08:43
5150
发布2018-09-19 16:08:43
举报
/// <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 > 0)
            {
                string str = args[0].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(0, key0.Length - 4));
                            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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用工具安装,运行,停止,卸载Window服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档