zoukankan      html  css  js  c++  java
  • vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动

    一、安装服务:
    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

     

    come from http://www.cnblogs.com/hesen/archive/2009/03/13/1411129.html

  • 相关阅读:
    .Net常见面试题整理(一)——值类型和引用类型
    c#字符串常见操作
    sealed,new,virtual,abstract与override
    c#好的程序员必须掌握的编码习惯
    c#区分传值调用 传引用调用。
    C# const和readonly的区别
    .Net常见面试题整理(二)——装箱和拆箱
    C#Equals()和运算符==的区别
    private,protected,public和internal的区别
    2013应届毕业生“数码视讯”校招应聘总结
  • 原文地址:https://www.cnblogs.com/wuming/p/1505861.html
Copyright © 2011-2022 走看看