添加windows服务

Code
一、安装服务:
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));
                        }
                    }
                }
            }
        }

 

 

posted @ 2009-11-15 22:51  chunchill  阅读(391)  评论(0编辑  收藏  举报