安装 卸载 windows服务

本文介绍了一个简单的.NET应用程序,用于管理Windows服务的安装、卸载、检测、启动、停止及服务启动类型修改。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration.Install;
using System.ServiceProcess;
using Microsoft.Win32;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string aaa= GetServiceStartType(textBox1.Text.Trim());
            ChangeServiceStartType(2, textBox1.Text.Trim());
            InstallService("", textBox1.Text.Trim());
        }

        #region 服务

        /// <summary>
        /// 安装服务
        /// </summary>
        /// <param name="serviceName"></param>
        /// <param name="serviceFileName"></param>
        public void InstallService(string serviceName, string serviceFileName)
        {
            try
            {
                string[] cmdline = { };
                serviceFileName = Application.StartupPath + "\\"+serviceFileName;
                TransactedInstaller transactedInstaller = new TransactedInstaller();
                AssemblyInstaller assemblyInstaller = new AssemblyInstaller(serviceFileName, cmdline);
                transactedInstaller.Installers.Add(assemblyInstaller);
                transactedInstaller.Install(new System.Collections.Hashtable());
            }
            catch (Exception ex)
            {
                string msg = ex.Message;
            }

        }

        /// <summary>
        /// 卸载服务
        /// </summary>
        /// <param name="serviceName"></param>
        /// <param name="serviceFileName"></param>
        public void UnInstallService(string serviceName, string serviceFileName)
        {
            try
            {
                string[] cmdline = { };
                //serviceFileName = System.Reflection.Assembly.GetExecutingAssembly().Location;
                serviceFileName = Application.StartupPath + "\\" + serviceFileName;
                TransactedInstaller transactedInstaller = new TransactedInstaller();
                AssemblyInstaller assemblyInstaller = new AssemblyInstaller(serviceFileName, cmdline);
                transactedInstaller.Installers.Add(assemblyInstaller);
                transactedInstaller.Uninstall(null);
            }

            catch (Exception ex)
            {
                string msg = ex.Message;
            }
        }

        /// <summary>
        /// 检测服务是否存在
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public bool ServiceIsExisted(string serviceName)
        {
            bool isFlag=false;
            ServiceController[] array = ServiceController.GetServices();
            foreach (ServiceController serviceController in array)
            {
                if (serviceController.ServiceName.Trim().ToUpper() == serviceName.Trim().ToUpper())
                {
                    isFlag = true;
                    break;
                }
            }
            return isFlag; 
        }

        /// <summary>
        /// 检测服务是否启动
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public bool ServiceIsRunning(string serviceName)
        {
            ServiceController serviceController1 = new ServiceController();
            serviceController1.ServiceName = serviceName;
            serviceController1.Refresh();
            return serviceController1.Status == ServiceControllerStatus.Running;
        }

        /// <summary>
        /// 启动服务
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public bool StartService(string serviceName)
        {
            ServiceController serviceController1 = new ServiceController();
            serviceController1.ServiceName = serviceName;
            serviceController1.Start();
            return true;
        }

        /// <summary>
        /// 停止服务
        /// </summary>
        /// <param name="serviseName"></param>
        /// <returns></returns>
        public bool StopService(string serviseName)
        {
            ServiceController serviceController1 = new ServiceController();
            serviceController1.ServiceName = serviseName;
            serviceController1.Stop();
            return true;
        }

        /// <summary>            
        /// 修改服务的启动项 Start=0 启动 ,Start=1 系统 ,Start=2 自动 ,Start=3 手动 ,Start=4 禁用           
        /// </summary>            
        /// <param name="startType">启动类型</param>            
        /// <param name="serviceName">服务名</param>            
        /// <returns>是否设置成功</returns>            
        public static bool ChangeServiceStartType(int startType, string serviceName)
        {
            try
            {
                RegistryKey regist = Registry.LocalMachine;
                RegistryKey sysReg = regist.OpenSubKey("SYSTEM");
                RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet");
                RegistryKey services = currentControlSet.OpenSubKey("Services");
                RegistryKey servicesName = services.OpenSubKey(serviceName, true);
                servicesName.SetValue("Start", startType);
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }

        /// <summary>    
        /// 获取服务启动类型  Start=0 启动 ,Start=1 系统 ,Start=2 自动 ,Start=3 手动 ,Start=4 禁用    
        /// </summary>    
        /// <param name="serviceName"></param>    
        /// <returns></returns>    
        public string GetServiceStartType(string serviceName)
        {
            string ret="-1";
            try
            {
                RegistryKey regist = Registry.LocalMachine;
                RegistryKey sysReg = regist.OpenSubKey("SYSTEM");
                RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet");
                RegistryKey services = currentControlSet.OpenSubKey("Services");
                RegistryKey servicesName = services.OpenSubKey(serviceName, true);
                ret =servicesName.GetValue("Start").ToString();
            }
            catch (Exception ex)
            {
                
            }
            return ret;
        }

        #endregion
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值