zoukankan      html  css  js  c++  java
  • 安装 启动 停止 卸载 Windows服务 c#

    问题:windows服务安装时,出错:System.ComponentModel.Win32Exception: 帐户名无效或不存在,

    解决:将serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。

       运行: Installuitl 程序名.exe ,安装成功。

       卸载是  Installuitl /u 程序名.exe 

    问题:如何不使用InstallUtil 安装 启动 停止 卸载 Windows服务?

    解决:用System.Configuration.Install.AssemblyInstaller类加载一个程序集,并运行其中的安装程序。    
        [C#]    
        //安装服务
        public static void InstallService(string filepath, string serviceName, string[] options)
        {
            try
            {
                if (!IsServiceExisted(serviceName))
                {
                    IDictionary mySavedState = new Hashtable();
                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                    myAssemblyInstaller.UseNewContext = true;
                    myAssemblyInstaller.Path = filepath;
                    myAssemblyInstaller.CommandLine = options;
                    myAssemblyInstaller.Install(mySavedState);
                    myAssemblyInstaller.Commit(mySavedState);
                    myAssemblyInstaller.Dispose();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Install Service Error\n" + ex.Message);
            }
        }
        //卸载服务
        public static void UnInstallService(string filepath, string serviceName, string[] options)
        {
            try
            {
                if (IsServiceExisted(serviceName))
                {
                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                    myAssemblyInstaller.UseNewContext = true;
                    myAssemblyInstaller.Path = filepath;
                    myAssemblyInstaller.CommandLine = options;
                    myAssemblyInstaller.Uninstall(null);
                    myAssemblyInstaller.Dispose();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("UnInstall Service Error\n" + ex.Message);
            }
        }
        //判断服务是否存在
        public static bool IsServiceExisted(string serviceName)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
            {
                if (s.ServiceName == serviceName)
                {
                    return true;
                }
            }
            return false;
        }
        //启动服务
        public static void StartService(string serviceName)
        {
            if (IsServiceExisted(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();
                    service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(60));
                }
            }
        }
        //停止服务
        public static void StopService(string serviceName)
        {
            if (IsServiceExisted(serviceName))
            {
                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
                if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
                {
                    service.Stop();
                    service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(60));
                }
            }
        }

  • 相关阅读:
    队列

    有序数组
    集合:一条规则决定性能
    基础数据结构:数组
    空间复杂度
    插入排序
    重新认识Javascript的一些误区总结
    Knockout: 使用knockout validation插件进行校验, 给未通过校验的输入框添加红色边框突出显示.
    Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.
  • 原文地址:https://www.cnblogs.com/scgw/p/2430483.html
Copyright © 2011-2022 走看看