健康一贴灵,专注医药行业管理信息化

C#实操1 创建windows服务,并用winform窗口程序实现安装服务、开启服务、停止服务、卸载服务

使用winform程序控制window服务的操作 c#之添加window服务(定时任务) - 腾讯云开发者社区-腾讯云 (tencent.com)

79条消息) C#实操1 创建windows服务,并用winform窗口程序实现安装服务、开启服务、停止服务、卸载服务_67号人生的博客-CSDN博客_c# winform服务

 

(79条消息) winform安装、启动、停止、卸载windows服务!_woflyoycm的博客-CSDN博客_winfrom 卸载

在winform项目中编写代码控制服务

1

1、winform程序添加权限

要控制windows服务的话,程序需要高于一般winform程序的权限。

解决办法:右键winform项目,添加新项,选择应用程序清单文件,默认会建立app.manifest

requestedExecutionLevel:配置权限的地方在这里!默认的是asInvoker,我们修改为requireAdministrator(需要管理员身份!)

 

 

 

 

 

 

首先要在项目中引入两个包:

using System.ServiceProcess;//用来控制服务的启动和停止

using System.Configuration.Install;//用来控制服务的安装与卸载

然后我们将服务控制的代码封装到一个工具类中,方便今后复用,直接贴代码

using HJYYDataService.CommonTool;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration.Install;
using System.Linq;
using System.ServiceProcess;
using System.Text;
 
namespace HJYYDataService.Helper
{
    /// <summary>
    /// 服务管理工具类 by oycm
    /// 注意:HJYYDataService.CommonTool.LogHelper是自己封装的日志工具类,请替换成自己的日志类
    /// </summary>
    public class ServiceHelper
    {
        //服务的应用程序文件地址,这里放在同一个目录下,方便调用
        private static string ServicePath = $"{AppDomain.CurrentDomain.BaseDirectory}\\HJYYDataService.exe";
        //之前设置好的服务名称
        private const string ServiceName = "HJYYDataService";
 
        /// <summary>
        /// 安装windows服务
        /// 安装服务前可以先调用方法检测服务是否存在
        /// </summary>
        public static void InstallService()
        {
            try
            {
                using (AssemblyInstaller installer = new AssemblyInstaller())
                {
                    installer.UseNewContext = true;
                    installer.Path = ServicePath;
                    IDictionary savedState = new Hashtable();
                    installer.Install(savedState);
                    installer.Commit(savedState);
                    LogHelper.WriteLog("启动服务成功");
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("启动服务失败"+ex.Message);
                throw;
            }
        }
 
        /// <summary>
        /// 卸载windows服务
        /// 卸载服务前可以先调用方法检测服务是否存在
        /// </summary>
        public static void UninstallService()
        {
            try
            {
                using (AssemblyInstaller installer = new AssemblyInstaller())
                {
                    installer.UseNewContext = true;
                    installer.Path = ServicePath;
                    installer.Uninstall(null);
                    LogHelper.WriteLog("卸载服务成功");
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("卸载服务失败"+ex.Message);
                throw;
            }
        }
 
        /// <summary>
        /// 判断服务是否已经安装  注意在和服务相关的功能基本都需要调用
        /// </summary>
        /// <returns></returns>
        public static bool ServiceExists()
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (var item in services)
            {
                if (item.ServiceName.ToLower() == ServiceName.ToLower())
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// 服务是否处于运行状态
        /// </summary>
        /// <returns></returns>
        public static bool IsServiceRunning()
        {
            if (!ServiceExists()) return false;
            if (GetServiceState() == ServiceControllerStatus.Running) return true;
            return false;
        }
 
        /// <summary>
        /// 服务是否处于停止状态
        /// </summary>
        /// <returns></returns>
        public static bool IsServiceStopped()
        {
            if (!ServiceExists()) return false;
            if (GetServiceState() == ServiceControllerStatus.Stopped) return true;
            return false;
        }
 
 
        /// <summary>
        /// 停止windows服务
        /// 停止服务前可以先检测服务是否存在、是否处于运行状态
        /// </summary>
        public static void StopService()
        {
            try
            {
                using (ServiceController sc = new ServiceController(ServiceName))
                {
                    if (sc.Status == ServiceControllerStatus.Running)
                    {
                        sc.Stop();
                        LogHelper.WriteLog("停止服务成功");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("停止服务失败"+ex.Message);
                throw;
            }
        }
 
        /// <summary>
        /// 启动windows服务
        /// 启动服务前可以先检测服务是否存在、是否处于停止状态
        /// </summary>
        public static void StartService()
        {
            try
            {
                using (ServiceController sc = new ServiceController(ServiceName))
                {
                    if (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        sc.Start();
                        LogHelper.WriteLog("启动服务成功");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("启动服务失败" + ex.Message);
                throw;
            }
        }
 
        /// <summary>
        /// 获取windows服务状态
        /// </summary>
        /// <returns></returns>
        private static ServiceControllerStatus GetServiceState()
        {
            using (ServiceController sc = new ServiceController(ServiceName))
            {
                return sc.Status;
            }
        }
    }
}


原文链接:https://blog.csdn.net/woflyoycm/article/details/113364519

posted @ 2022-08-12 16:56  一贴灵  阅读(1680)  评论(0编辑  收藏  举报
学以致用,效率第一