您的位置:首页 > 编程语言 > C#

C#启用服务 关闭服务 安装服务 卸载服务

2013-01-22 09:14 351 查看
一.C#运用ProcessStartInfo安装服务,卸载服务,启用服务,关闭服务的操作!

 

[c-sharp]
view plaincopy

C#运用ProcessStartInfo安装服务,卸载服务,启用服务,关闭服务的操作!    
  /// <summary>  
    /// 从CMD运行里面启用服务  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e"></param>  
    protected void Button4_Click1(object sender, EventArgs e)  
    {  
         //开启服务  
        ProcessStartInfo a = new ProcessStartInfo(@"c:/windows/system32/cmd.exe","/c  net start 服务名");  
        a.WindowStyle = ProcessWindowStyle.Hidden;  
        Process process = Process.Start(a);  
          
          
    }  
    protected void Button5_Click1(object sender, EventArgs e)  
    {  
         //关闭服务  
        ProcessStartInfo a = new ProcessStartInfo(@"c:/windows/system32/cmd.exe","/c  net stop 服务名");  
        a.WindowStyle = ProcessWindowStyle.Hidden;  
        Process process = Process.Start(a);  
          
          
    }  
    protected void Button6_Click1(object sender, EventArgs e)  
    {  
          ProcessStartInfo a = new ProcessStartInfo(@"D://zhengxinle//xiangmu//NetView//NetView//Transmit.exe" ,"-install");  
        Console.Write("安装服务成功");  
        a.WindowStyle = ProcessWindowStyle.Hidden;  
        Process process = Process.Start(a);  
}  
  
    protected void Button7_Click1(object sender, EventArgs e)  
    {  
          ProcessStartInfo a = new ProcessStartInfo(@"D://zhengxinle//xiangmu//NetView//NetView//Transmit.exe" ,"-remove");  
        Console.Write("卸载服务成功");  
        a.WindowStyle = ProcessWindowStyle.Hidden;  
        Process process = Process.Start(a);  
}  

 

二.通过API函数加载

 

[c-sharp]
view plaincopy

using System.Configuration.Install;  
using System.ServiceProcess;  
using System.Runtime.InteropServices;  
 
#region DLLImport    
  
        [DllImport("advapi32.dll")]    
        public static extern IntPtr OpenSCManager(string lpMachineName,string lpSCDB, int scParameter);    
        [DllImport("Advapi32.dll")]     
        public static extern IntPtr CreateService(IntPtr SC_HANDLE,string lpSvcName,string lpDisplayName,       
          int dwDesiredAccess,int dwServiceType, int dwStartType,int dwErrorControl,string lpPathName,      
          string lpLoadOrderGroup,int lpdwTagId, string lpDependencies,string lpServiceStartName,string lpPassword);   
        [DllImport("advapi32.dll")]      
        public static extern void CloseServiceHandle(IntPtr SCHANDLE);    
        [DllImport("advapi32.dll")]     
        public static extern int StartService(IntPtr SVHANDLE,int dwNumServiceArgs,string lpServiceArgVectors);    
        [DllImport("advapi32.dll",SetLastError=true)]     
        public static extern IntPtr OpenService(IntPtr SCHANDLE,string lpSvcName,int dwNumServiceArgs);    
        [DllImport("advapi32.dll")]     
        public static extern int DeleteService(IntPtr SVHANDLE);     
        [DllImport("kernel32.dll")]     
        public static extern int GetLastError();    
  
        #endregion DLLImport  
  
  ///       
        /// 安装和运行     
        /// /// C#安装程序路径.     
        /// /// 服务名     
        /// /// 服务显示名称.     
        /// /// 服务安装是否成功.     
        public bool InstallService(string svcPath, string svcName, string svcDispName)     
        {      
            #region Constants declaration.       
            int SC_MANAGER_CREATE_SERVICE = 0x0002;      
            int SERVICE_WIN32_OWN_PROCESS = 0x00000010;       
            //int SERVICE_DEMAND_START = 0x00000003;       
            int SERVICE_ERROR_NORMAL = 0x00000001;      
            int STANDARD_RIGHTS_REQUIRED = 0xF0000;      
            int SERVICE_QUERY_CONFIG = 0x0001;       
            int SERVICE_CHANGE_CONFIG = 0x0002;      
            int SERVICE_QUERY_STATUS = 0x0004;       
            int SERVICE_ENUMERATE_DEPENDENTS = 0x0008;       
            int SERVICE_START =0x0010;       
            int SERVICE_STOP =0x0020;      
            int SERVICE_PAUSE_CONTINUE =0x0040;      
            int SERVICE_INTERROGATE =0x0080;      
            int SERVICE_USER_DEFINED_CONTROL =0x0100;       
            int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |         
                SERVICE_QUERY_CONFIG |       
                SERVICE_CHANGE_CONFIG |       
                SERVICE_QUERY_STATUS |        
                SERVICE_ENUMERATE_DEPENDENTS |        
                SERVICE_START |        
                SERVICE_STOP |        
                SERVICE_PAUSE_CONTINUE |         
                SERVICE_INTERROGATE |        
                SERVICE_USER_DEFINED_CONTROL);       
            int SERVICE_AUTO_START = 0x00000002;      
            #endregion Constants declaration.       
            try    {       
                IntPtr sc_handle = OpenSCManager(null,null,SC_MANAGER_CREATE_SERVICE);      
                if (sc_handle.ToInt32() != 0)       
                {         
                    IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,null,0,null,null,null);      
                    if(sv_handle.ToInt32() ==0)        
                    {        
                        CloseServiceHandle(sc_handle);        
                        return false;        
                    }       
                    else       
                    {        
                        //试尝启动服务       
                        int i = StartService(sv_handle,0,null);         
                        if(i==0)         
                        {          
                            return false;    
                        }         
                        CloseServiceHandle(sc_handle);        
                        return true;       
                    }       
                }       
                else        
                    return false;   
            }       
            catch(Exception e)   
     
            {       
                throw e;      
            }    
        }  
 ///       
        /// 反安装服务.    
        /// ///       
        /// 服务名.      
        public bool UnInstallService(string svcName)     
        {      
            int GENERIC_WRITE = 0x40000000;      
            IntPtr sc_hndl = OpenSCManager(null,null,GENERIC_WRITE);       
            if(sc_hndl.ToInt32() !=0)      
            {      int DELETE = 0x10000;     
                IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);      
                if(svc_hndl.ToInt32() !=0)       
                {         
                    int i = DeleteService(svc_hndl);     
                    if (i != 0)         
                    {          
                        CloseServiceHandle(sc_hndl);        
                        return true;        
                    }        
                    else       
                    {          
                        CloseServiceHandle(sc_hndl);        
                        return false;       
                    }       
                }       
                else     
                    return false;       
            }       
            else     
                return false;    
        }    

三.加载一个程序集,并运行其中的所有安装程序。

 

[c-sharp]
view plaincopy

////////@@@是服务的名字  
    /// <summary>  
    /// 用ServiceController启用服务  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e"></param>  
    protected void Button5_Click(object sender, EventArgs e)  
    {  
        System.ServiceProcess.ServiceController   myController   =  
              new System.ServiceProcess.ServiceController("@@@");     
     
 ///ContinuePending 服务即将继续。这对应于 Win32 SERVICE_CONTINUE_PENDING 常数,该常数定义为 0x00000005。    
 //Paused 服务已暂停。这对应于 Win32 SERVICE_PAUSED 常数,该常数定义为 0x00000007。    
 //PausePending 服务即将暂停。这对应于 Win32 SERVICE_PAUSE_PENDING 常数,该常数定义为 0x00000006。    
 //Running 服务正在运行。这对应于 Win32 SERVICE_RUNNING 常数,该常数定义为 0x00000004。    
 //StartPending 服务正在启动。这对应于 Win32 SERVICE_START_PENDING 常数,该常数定义为 0x00000002。    
 //Stopped 服务未运行。这对应于 Win32 SERVICE_STOPPED 常数,该常数定义为 0x00000001。    
 //StopPending 服务正在停止。这对应于 Win32 SERVICE_STOP_PENDING 常数,该常数定义为 0x00000003。    
  
        if (myController.Status.Equals(ServiceControllerStatus.Stopped)||myController.Status.Equals(ServiceControllerStatus.StopPending))  
        {     
              myController.Start();  
            this.Button5.Text="关闭服务";  
              Response.Write("<mce:script language=javascript><!--  
alert('开启');  
// --></mce:script>");  
        }    
        else  
        {  
              myController.Stop();  
            this.Button5.Text="开启服务";  
            Response.Write("<mce:script language=javascript><!--  
alert('关闭服务');  
// --></mce:script>");  
        }  
  
    }  
  
  
一、安装服务:  
  
private void InstallService(IDictionary stateSaver, string filepath)  
  
        {  
  
            try  
  
            {  
  
                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName");  
  
                if(!ServiceIsExisted("ServiceName"))  
  
                {  
  
                    //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)  
  
            {  
  
                throw new Exception("installServiceError/n" + ex.Message);  
  
            }  
  
        }  
  
二、卸载windows服务:  
  
        private void UnInstallService(string filepath)  
  
        {  
  
            try  
  
            {  
  
                if (ServiceIsExisted("ServiceName"))  
  
                {  
  
                    //UnInstall Service  
  
                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();  
  
                    myAssemblyInstaller.UseNewContext = true;  
  
                    myAssemblyInstaller.Path = filepath;  
  
                    myAssemblyInstaller.Uninstall(null);  
  
                    myAssemblyInstaller.Dispose();  
  
                }  
  
            }  
  
            catch (Exception ex)  
  
            {  
  
                throw new Exception("unInstallServiceError/n" + ex.Message);  
  
            }  
  
        }  
  
三、判断window服务是否存在:  
  
        private bool ServiceIsExisted(string serviceName)  
  
        {  
  
            ServiceController[] services = ServiceController.GetServices();  
  
            foreach (ServiceController s in services)  
  
            {  
  
                if (s.ServiceName == serviceName)  
  
                {  
  
                    return true;  
  
                }  
  
            }  
  
            return false;  
  
        }  
  
四、启动服务:  
  
private 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 < 60; i++)  
  
                    {  
  
                        service.Refresh();  
  
                        System.Threading.Thread.Sleep(1000);  
  
                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)  
  
                        {  
  
                            break;  
  
                        }  
  
                        if (i == 59)  
  
                        {  
  
                            throw new Exception(startServiceError.Replace("$s$", serviceName));  
  
                        }  
  
                    }  
  
                }  
  
            }  
  
        }  
  
五、停止服务:  
  
        private 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 < 60; i++)  
  
                    {  
  
                        service.Refresh();  
  
                        System.Threading.Thread.Sleep(1000);  
  
                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)  
  
                        {  
  
                            break;  
  
                        }  
  
                        if (i == 59)  
  
                        {  
  
                            throw new Exception(stopServiceError.Replace("$s$", serviceName));  
  
                        }  
  
                    }  
  
                }  
  
            }  
  
        }  
  
  
注:手动安装window服务的方法:  
  
在“Visual Studio 2005 命令提示”窗口中,运行:  
  
安装服务:installutil servicepath  
  
卸除服务:installutil /u servicepath 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#