Windows服務控制

        #region Windows服務控制

        /// <summary>
        /// 安裝服務
        /// </summary>
        /// <param name="stateSaver"></param>
        /// <param name="filepath"></param>
        private void InstallService(IDictionary stateSaver, string filepath)
        {
            try
            {
                ServiceController service = new ServiceController("WCFService");

                if (!ServiceIsExisted("WCFService"))
                {
                    //Install Service  
                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                    myAssemblyInstaller.UseNewContext = true;
                    myAssemblyInstaller.Path = filepath;
                    myAssemblyInstaller.Install(stateSaver);
                    myAssemblyInstaller.Commit(stateSaver);
                    myAssemblyInstaller.Dispose();
                    //--Start Service  
                    service.Start();
                }
                else
                {
                    if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
                    {
                        service.Start();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("安裝服務失敗!");
            }
        }

        /// <summary>
        /// 卸載windows服務
        /// </summary>
        /// <param name="filepath"></param>
        private void UnInstallService(string filepath)
        {
            try
            {
                if (ServiceIsExisted("WCFService"))
                {
                    //UnInstall Service  
                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                    myAssemblyInstaller.UseNewContext = true;
                    myAssemblyInstaller.Path = filepath;
                    myAssemblyInstaller.Uninstall(null);
                    myAssemblyInstaller.Dispose();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("卸載服務失敗!");
            }
        }

        /// <summary>
        /// 判斷window服務是否存在
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        private bool ServiceIsExisted(string serviceName)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
            {
                if (s.ServiceName == serviceName)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// 判斷window服務是否啓動
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public static bool IsServiceStart(string serviceName)
        {
            ServiceController psc = new ServiceController(serviceName);
            bool bStartStatus = false;
            try
            {
                if (!psc.Status.Equals(ServiceControllerStatus.Stopped))
                {
                    bStartStatus = true;
                }

                return bStartStatus;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// 啓動服務
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        private bool StartService(string serviceName)
        {
            bool flag = true;
            if (ServiceIsExisted(serviceName))
            {
                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
                if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
                {
                    service.Start();
                    for (int i = 0; i < 60; i++)
                    {
                        service.Refresh();
                        System.Threading.Thread.Sleep(1000);
                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
                        {
                            break;
                        }
                        if (i == 59)
                        {
                            flag = false;
                        }
                    }
                }
            }
            return flag;
        }

        /// <summary>
        /// 停止服務
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        private bool StopService(string serviceName)
        {
            bool flag = true;
            if (ServiceIsExisted(serviceName))
            {
                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
                if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
                {
                    service.Stop();
                    for (int i = 0; i < 60; i++)
                    {
                        service.Refresh();
                        System.Threading.Thread.Sleep(1000);
                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
                        {
                            break;
                        }
                        if (i == 59)
                        {
                            flag = false;
                        }
                    }
                }
            }

            return flag;
        }

        /// <summary>
        /// 獲取服務啓動類型
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns>2:自動 3:手動 4:禁用 0:獲取失敗</returns>
        public string GetServiceStartMode(string serviceName)
        {
            string ServiceRunningState = string.Empty;
            int Mode = 0;
            try
            {
                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\" + serviceName);
                Mode = Convert.ToInt32(key.GetValue("Start"));
                switch (Mode)
                {
                    case 0:
                        ServiceRunningState = "獲取失敗";
                        break;
                    case 2:
                        ServiceRunningState = "自動";
                        break;
                    case 3:
                        ServiceRunningState = "手動";
                        break;
                    case 4:
                        ServiceRunningState = "禁用";
                        break;
                }
                key.Close();
            }
            catch (Exception)
            {
                return ServiceRunningState = "獲取失敗";
            }
            return ServiceRunningState;
        }

        /// <summary>
        /// 獲取服務描述信息
        /// </summary>
        /// <param name="serviceNmae"></param>
        /// <returns></returns>
        private string GetServiceDescription(string serviceNmae)
        {
            string ServiceDescription = string.Empty;
            System.ServiceProcess.ServiceInstaller si = new ServiceInstaller();
            //si.Description

            return ServiceDescription;
        }

        /// <summary>
        /// 設置服務啓動類型
        /// </summary>
        /// <param name="Mode">2:自動 3:手動 4:禁用</param>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public bool SetServiceStartMode(int Mode, string serviceName)
        {
            try
            {
                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\" + serviceName, true);
                key.SetValue("Start", Mode);
                key.Close();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        #endregion

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章