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
活到老,学到老。