WIndow服务操作

来源:互联网 发布:淘宝销售排行榜 编辑:程序博客网 时间:2024/05/13 02:01
01.using System;  02.using System.Collections.Generic;  03.using System.ComponentModel;  04.using System.Data;  05.using System.Drawing;  06.using System.Text;  07.using System.Windows.Forms;  08.using System.Collections;  09.using System.Configuration.Install;  10.using System.Collections.Specialized;  11.using System.ServiceProcess;  12.  13.namespace IAU.ServerInstall.BLL  14.{  15.    public class ServiceControl  16.    {  17.        /// <summary>  18.        /// 注册服务(注册完就启动,已经存在的服务直接启动。)  19.        /// </summary>  20.        /// <param name="strServiceName">服务名称</param>  21.        /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>  22.        public void Register(string strServiceName, string strServiceInstallPath)  23.        {  24.            IDictionary mySavedState = new Hashtable();  25.  26.            try  27.            {  28.                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(strServiceName);  29.  30.                //服务已经存在则卸载  31.                if (ServiceIsExisted(strServiceName))  32.                {  33.                    //StopService(strServiceName);  34.                    UnInstallService(strServiceName, strServiceInstallPath);  35.                }  36.                service.Refresh();  37.                //注册服务  38.                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();  39.  40.                mySavedState.Clear();  41.                myAssemblyInstaller.Path = strServiceInstallPath;  42.                myAssemblyInstaller.UseNewContext = true;  43.                myAssemblyInstaller.Install(mySavedState);  44.                myAssemblyInstaller.Commit(mySavedState);  45.                myAssemblyInstaller.Dispose();  46.  47.                service.Start();  48.            }  49.            catch (Exception ex)  50.            {  51.                throw new Exception("注册服务时出错:" + ex.Message);  52.            }  53.        }  54.  55.        /// <summary>  56.        /// 卸载服务  57.        /// </summary>  58.        /// <param name="strServiceName">服务名称</param>  59.        /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>  60.        public void UnInstallService(string strServiceName, string strServiceInstallPath)  61.        {  62.            try  63.            {  64.                if (ServiceIsExisted(strServiceName))  65.                {  66.                    //UnInstall Service  67.                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();  68.                    myAssemblyInstaller.UseNewContext = true;  69.                    myAssemblyInstaller.Path = strServiceInstallPath;  70.                    myAssemblyInstaller.Uninstall(null);  71.                    myAssemblyInstaller.Dispose();  72.                }  73.            }  74.            catch (Exception ex)  75.            {  76.                throw new Exception("卸载服务时出错:" + ex.Message);  77.            }  78.        }  79.  80.  81.        /// <summary>  82.        /// 判断服务是否存在  83.        /// </summary>  84.        /// <param name="serviceName">服务名</param>  85.        /// <returns></returns>  86.        public bool ServiceIsExisted(string serviceName)  87.        {  88.            ServiceController[] services = ServiceController.GetServices();  89.            foreach (ServiceController s in services)  90.            {  91.                if (s.ServiceName == serviceName)  92.                {  93.                    return true;  94.                }  95.            }  96.            return false;  97.        }  98.  99.        /// <summary>  100.        /// 启动服务(启动存在的服务,30秒后启动失败报错)  101.        /// </summary>  102.        /// <param name="serviceName">服务名</param>  103.        public void StartService(string serviceName)  104.        {  105.            if (ServiceIsExisted(serviceName))  106.            {  107.                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);  108.                if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)  109.                {  110.                    service.Start();  111.                    for (int i = 0; i < 30; i++)  112.                    {  113.                        service.Refresh();  114.                        System.Threading.Thread.Sleep(1000);  115.                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)  116.                        {  117.                            break;  118.                        }  119.                        if (i == 29)  120.                        {  121.                            throw new Exception("服务" + serviceName + "启动失败!");  122.                        }  123.                    }  124.                }  125.            }  126.        }  127.  128.        /// <summary>  129.        /// 停止服务(停止存在的服务,30秒后停止失败报错)  130.        /// </summary>  131.        /// <param name="serviceName"></param>  132.        public void StopService(string serviceName)  133.        {  134.            if (ServiceIsExisted(serviceName))  135.            {  136.                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);  137.                if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)  138.                {  139.                    service.Stop();  140.                    for (int i = 0; i < 30; i++)  141.                    {  142.                        service.Refresh();  143.                        System.Threading.Thread.Sleep(1000);  144.                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)  145.                        {  146.                            break;  147.                        }  148.                        if (i == 29)  149.                        {  150.                            throw new Exception("服务" + serviceName + "停止失败!");  151.                        }  152.                    }  153.                }  154.            }  155.        }  156.    }  157.}