C# 创建服务,卸载服务,停止服务的类,下载可直接使用。

本文提供了一个C#类,用于创建、卸载、启动和停止Windows服务。通过简单的API调用,可以实现服务的状态管理和操作。

在网上转了半天,刚收集到的。

C# 创建服务,卸载服务,停止服务的类,下载可直接使用。

 

//注意,添加代码前,需要引用,以下三个文件。

//1、System.Configuration

//2、System.Configuration.install

//3、System.ServiceProcess

//www.wanyouc.com www.cnhgds.com www.yunweis.com

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Text;  
using System.Windows.Forms;  
using System.Collections;  
using System.Configuration.Install;  
using System.Collections.Specialized;  
using System.ServiceProcess;  
//www.wanyouc.com www.cnhgds.com www.yunweis.com 
namespace Kmgog
{

//www.wanyouc.com www.cnhgds.com www.yunweis.com   
    public class ServiceControl   //www.wanyouc.com www.cnhgds.com www.yunweis.com
    {  
        /// <summary>  
        /// 注册服务(注册完就启动,已经存在的服务直接启动。) 

        ///www.wanyouc.com www.cnhgds.com www.yunweis.com  
        /// </summary>  
        /// <param name="strServiceName">服务名称</param>  
        /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>  
        public void Register(string strServiceName, string strServiceInstallPath)  
        {  
            IDictionary mySavedState = new Hashtable();  
 
            try 
            {  
                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(strServiceName);  
 
                //服务已经存在则卸载  
                if (ServiceIsExisted(strServiceName))  
                {  
                    //StopService(strServiceName);  
                    UnInstallService(strServiceName, strServiceInstallPath);  
                }  
                service.Refresh();  
                //注册服务  
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();  
 
                mySavedState.Clear();  
                myAssemblyInstaller.Path = strServiceInstallPath;  
                myAssemblyInstaller.UseNewContext = true;  
                myAssemblyInstaller.Install(mySavedState);  
                myAssemblyInstaller.Commit(mySavedState);  
                myAssemblyInstaller.Dispose();  
 
                service.Start();  
            }  
            catch (Exception ex)  
            {  
                throw new Exception("注册服务时出错:" + ex.Message);  
            }  
        }  
 
        /// <summary>  
        /// 卸载服务  

        ///www.wanyouc.com www.cnhgds.com www.yunweis.com  
        /// </summary>  
        /// <param name="strServiceName">服务名称</param>  
        /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>  
        public void UnInstallService(string strServiceName, string strServiceInstallPath)  
        {  
            try 
            {  
                if (ServiceIsExisted(strServiceName))  
                {  
                    //UnInstall Service  
                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();  
                    myAssemblyInstaller.UseNewContext = true;  
                    myAssemblyInstaller.Path = strServiceInstallPath;  
                    myAssemblyInstaller.Uninstall(null);  
                    myAssemblyInstaller.Dispose();  
                }  
            }  
            catch (Exception ex)  
            {  
                throw new Exception("卸载服务时出错:" + ex.Message);  
            }  
        }  
 
 
        /// <summary>  
        /// 判断服务是否存在  

        ///www.wanyouc.com www.cnhgds.com www.yunweis.com  
        /// </summary>  
        /// <param name="serviceName">服务名</param>  
        /// <returns></returns>  
        public bool ServiceIsExisted(string serviceName)  
        {  
            ServiceController[] services = ServiceController.GetServices();  
            foreach (ServiceController s in services)  
            {  
                if (s.ServiceName == serviceName)  
                {  
                    return true;  
                }  
            }  
            return false;  
        }  
 
        /// <summary>  
        /// 启动服务(启动存在的服务,30秒后启动失败报错)  

        ///www.wanyouc.com www.cnhgds.com www.yunweis.com  
        /// </summary>  
        /// <param name="serviceName">服务名</param>  
        public void StartService(string serviceName)  
        {  
            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 < 30; i++)  
                    {  
                        service.Refresh();  
                        System.Threading.Thread.Sleep(1000);  
                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)  
                        {  
                            break;  
                        }  
                        if (i == 29)  
                        {  
                            throw new Exception("服务" + serviceName + "启动失败!");  
                        }  
                    }  
                }  
            }  
        }  
 
        /// <summary>  
        /// 停止服务(停止存在的服务,30秒后停止失败报错)  

        ///www.wanyouc.com www.cnhgds.com www.yunweis.com   
        /// </summary>  
        /// <param name="serviceName"></param>  
        public void StopService(string serviceName)  
        {  
            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 < 30; i++)  
                    {  
                        service.Refresh();  
                        System.Threading.Thread.Sleep(1000);  
                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)  
                        {  
                            break;  
                        }  
                        if (i == 29)  
                        {  
                            throw new Exception("服务" + serviceName + "停止失败!");  
                        }  
                    }  
                }  
            }  
        }  
    }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值