博天堂国际娱乐城

本类库只系对基本的Windows服务操作

作者:admin 发布时间:2017-06-15
本类库只系对基本的Windows服务操作,没涉及到深入。我想大致的已经够用了。
可以改造一些批量以及依赖关系。

    /// <summary>
    /// Windows服务类
    /// </summary>
    public class ServiceUtil
    {
        /// <summary>
        /// 效验服务是否存在
        /// </summary>
        /// <param name="serviceName">Windows服务名</param>
        /// <returns>存在返回 true,否则返回 false;</returns>
        public static bool ServiceIsExisted(string serviceName)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
                if (s.ServiceName.ToLower() == serviceName.ToLower())
                    return true;
            return false;
        }

        /// <summary>
        /// 安装服务
 ,博天堂娱乐;       /// </summary>
        /// <param name="stateSaver">集合</param>
        /// <param name="filepath">Windows服务文件</param>
        public static void InstallService(IDictionary stateSaver, string filepath)
        {
            try
            {
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.Install(stateSaver);
                myAssemblyInstaller.Commit(stateSaver);
                myAssemblyInstaller.Dispose();
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 卸载服务
        /// </summary>
        /// <param name="filepath">Windows服务文件</param>
        public static void UnInstallService(string filepath)
        {
            try
            {
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.Uninstall(null);
                myAssemblyInstaller.Dispose();
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 判断Windows服务是否正在运行
        /// </summary>
        /// <param name="name">Windows服务名</param>
        /// <returns>
        ///     <c>true</c> if the specified name is run; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsRun(string name)
        {
            bool IsRun = false;
            try
            {
                if (!ServiceIsExisted(name)) return false;
                var sc = new ServiceController(name);
                if (sc.Status == ServiceControllerStatus.StartPending || sc.Status == ServiceControllerStatus.Running)
                {
 ,博天堂娱乐;                   IsRun = true;
                }
                sc.Close();
            }
            catch
            {
                IsRun = false;
            }
            return IsRun;
        }

        /// <summary>
        /// 启动服务
        /// </summary>
        /// <param name="name">服务名</param>
        /// <returns>启动成功返回 true,否则返回 false;</returns>
        public static bool StarService(string name)
        {
            try
            {
                var sc = new ServiceController(name);
                if (sc.Status == ServiceControllerStatus.Stopped || sc.Status == ServiceControllerStatus.StopPending)
                {
                    sc.Start();
                    sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10));
                }
                else
                {
                    
                }
                sc.Close();
                return true;
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 停止服务
        /// </summary>
        /// <param name="name">服务名</param>
        /// <returns>停止成功返回 true,否则返回 false;</returns>
        public static bool StopService(string name)
        {
            try
            {
                var sc = new ServiceController(name);
                if (sc.Status == ServiceControllerStatus.Running || sc.Status == ServiceControllerStatus.StartPending)
                {
                    sc.Stop();
                    sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 10));
                }
                else
                {
                    
                }
                sc.Close();
                return true;
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 重启服务
        /// </summary>
        /// <param name="name">服务名</param>
        /// <returns>重启成功返回 true,否则返回 false;</returns>
        public static bool RefreshService(string name)
        {
            return StopService(name) && StarService(name);
        }

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    /// <summary>
    /// Windows服务类
    /// </summary>
  ,博天堂娱乐;  public class ServiceUtil
    {
        /// <summary>
        /// 效验服务是否存在
        /// </summary>
        /// <param name="serviceName">Windows服务名</param>
        /// <returns>存在返回 true,否则返回 false;</returns>
        public static bool ServiceIsExisted(string serviceName)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
                if (s.ServiceName.ToLower() == serviceName.ToLower())
                    return true;
            return false;
        }

        /// <summary>
        /// 安装服务
        /// </summary>
        /// <param name="stateSaver">集合</param>
        /// <param name="filepath">Windows服务文件</param>
        public static void InstallService(IDictionary stateSaver, string filepath)
        {
            try
            {
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.Install(stateSaver);
                myAssemblyInstaller.Commit(stateSaver);
                myAssemblyInstaller.Dispose();
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 卸载服务
        /// </summary>
        /// <param name="filepath">Windows服务文件</param>
        public static void UnInstallService(string filepath)
        {
            try
            {
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.Uninstall(null);
                myAssemblyInstaller.Dispose();
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 判断Windows服务是否正在运行
        /// </summary>
        /// <param name="name">Windows服务名</param>
        /// <returns>
        ///     <c>true</c> if the specified name is run; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsRun(string name)
        {
            bool IsRun = false;
            try
            {
                if (!ServiceIsExisted(name)) return false;
                var sc = new ServiceController(name);
                if (sc.Status == ServiceControllerStatus.StartPending || sc.Status == ServiceControllerStatus.Running)
                {
                    IsRun = true;
                }
                sc.Close();
            }
            catch
            {
                IsRun = false;
            }
            return IsRun;
        }

        /// <summary>
        /// 启动服务
        /// </summary>
        /// <param name="name">服务名</param>
        /// <returns>启动成功返回 true,否则返回 false;</returns>
        public static bool StarService(string name)
        {
            try
            {
                var sc = new ServiceController(name);
                if (sc.Status == ServiceControllerStatus.Stopped || sc.Status == ServiceControllerStatus.StopPending)
                {
                    sc.Start();
                    sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10));
                }
                else
                {
                    
                }
                sc.Close();
                return true;
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 停止服务
        /// </summary>
        /// <param name="name">服务名</param>
        /// <returns>停止成功返回 true,否则返回 false;</returns>
        public static bool StopService(string name)
        {
            try
            {
                var sc = new ServiceController(name);
                if (sc.Status == ServiceControllerStatus.Running || sc.Status == ServiceControllerStatus.StartPending)
                {
                    sc.Stop();
                    sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 10));
                }
                else
                {
                    
                }
                sc.Close();
                return true;
            }
            catch (Exception ex)
            {
                throw new SysException(ex.Message, ex);
            }
        }

        /// <summary>
        /// 重启服务
        /// </summary>
        /// <param name="name">服务名</param>
        /// <returns>重启成功返回 true,否则返回 false;</returns>
        public static bool RefreshService(string name)
        {
            return StopService(name) && StarService(name);
        }
    }