记录c#开发Windows服务的过程

news/2024/7/7 7:03:48/文章来源:https://www.cnblogs.com/zdhxiangni/p/18272082

1.新建Windows服务项目

 2.重命名Service1.cs

 3.添加安装程序

 4.修改service,修改信息如下:

备注:ServiceName和安装后的服务名保持一致哦!!!

 5.修改serviceProcessInstaller1

 6.编辑TransService代码

 

7.添加新项目窗体应用程序

 

 

 代码:

  1 using System;
  2 using System.Windows.Forms;
  3 using System.ServiceProcess;
  4 using System.Configuration.Install;
  5 using System.Collections;
  6 
  7 namespace TransServiceTool
  8 {
  9     public partial class Form1 : Form
 10     {
 11         public Form1()
 12         {
 13             InitializeComponent();
 14         }
 15         string serviceFilePath = $"{Application.StartupPath}\\TransService.exe";
 16         string serviceName = "TransService";
 17 
 18         private void Form1_Load(object sender, EventArgs e)
 19         {
 20             if (this.IsServiceExisted(serviceName))
 21             {
 22                 this.btn_install.Enabled = false;
 23             }
 24             else
 25             {
 26                 this.btn_uninstall.Enabled = false;
 27             }
 28 
 29             ServiceControllerStatus serviceControllerStatus = this.IsServiceStatus(serviceName);
 30             if (serviceControllerStatus == 0)
 31             {
 32                 this.btn_start.Enabled = false;
 33                 this.btn_stop.Enabled = false;
 34             }
 35             if (serviceControllerStatus.Equals(ServiceControllerStatus.Stopped))
 36             {
 37                 this.btn_start.Enabled = true;
 38                 this.btn_stop.Enabled = false;
 39             }
 40             if (serviceControllerStatus.Equals(ServiceControllerStatus.Running))
 41             {
 42                 this.btn_start.Enabled = true;
 43                 this.btn_stop.Enabled = false;
 44             }
 45         }
 46 
 47         private void btn_install_Click(object sender, EventArgs e)
 48         {
 49             if (!this.IsServiceExisted(serviceName))
 50             {
 51                 this.InstallService(serviceFilePath);
 52                 this.btn_install.Enabled = false;
 53                 this.btn_uninstall.Enabled = true;
 54                 this.btn_start.Enabled = true;
 55                 this.btn_stop.Enabled = false;
 56             }
 57         }
 58 
 59         // 启动服务
 60         private void btn_start_Click(object sender, EventArgs e)
 61         {
 62             ServiceControllerStatus serviceControllerStatus = this.IsServiceStatus(serviceName);
 63             if (serviceControllerStatus.Equals(ServiceControllerStatus.Stopped))
 64             {
 65                 this.ServiceStart(serviceName);
 66                 this.btn_start.Enabled = false;
 67                 this.btn_stop.Enabled = true;
 68             }
 69             else
 70             {
 71                 //服务停止中,请稍后重试!
 72             }
 73         }
 74 
 75         // 停止服务
 76         private void btn_stop_Click(object sender, EventArgs e)
 77         {
 78             ServiceControllerStatus serviceControllerStatus = this.IsServiceStatus(serviceName);
 79             if (serviceControllerStatus.Equals(ServiceControllerStatus.Running))
 80             {
 81                 this.ServiceStop(serviceName);
 82                 this.btn_start.Enabled = true;
 83                 this.btn_stop.Enabled = false;
 84             }
 85             else
 86             {
 87                 //服务启动中,请稍后重试!
 88             }
 89         }
 90 
 91         // 卸载服务
 92         private void btn_uninstall_Click(object sender, EventArgs e)
 93         {
 94             if (this.IsServiceExisted(serviceName))
 95             {
 96                 ServiceControllerStatus serviceControllerStatus = this.IsServiceStatus(serviceName);
 97                 if (serviceControllerStatus.Equals(ServiceControllerStatus.Running))
 98                 {
 99                     this.ServiceStop(serviceName);
100                 }
101                 this.UninstallService(serviceFilePath);
102                 this.btn_uninstall.Enabled = false;
103                 this.btn_install.Enabled = true;
104                 this.btn_start.Enabled = false;
105                 this.btn_stop.Enabled = false;
106             }
107         }
108 
109         //判断服务是否存在
110         private bool IsServiceExisted(string serviceName)
111         {
112             ServiceController[] services = ServiceController.GetServices();
113             foreach (ServiceController sc in services)
114             {
115                 if (sc.ServiceName.ToLower() == serviceName.ToLower())
116                 {
117                     return true;
118                 }
119             }
120             return false;
121         }
122 
123         //判断服务是否是停止状态
124         private ServiceControllerStatus IsServiceStatus(string serviceName)
125         {
126             ServiceController[] services = ServiceController.GetServices();
127             foreach (ServiceController sc in services)
128             {
129                 if (sc.ServiceName.ToLower() == serviceName.ToLower())
130                 {
131                     return sc.Status;
132                 }
133             }
134             return new ServiceControllerStatus();
135         }
136         //安装服务
137         private void InstallService(string serviceFilePath)
138         {
139             using (AssemblyInstaller installer = new AssemblyInstaller())
140             {
141                 installer.UseNewContext = true;
142                 installer.Path = serviceFilePath;
143                 IDictionary savedState = new Hashtable();
144                 installer.Install(savedState);
145                 installer.Commit(savedState);
146             }
147         }
148         //卸载服务
149         private void UninstallService(string serviceFilePath)
150         {
151             using (AssemblyInstaller installer = new AssemblyInstaller())
152             {
153                 installer.UseNewContext = true;
154                 installer.Path = serviceFilePath;
155                 installer.Uninstall(null);
156             }
157         }
158         //启动服务
159         private void ServiceStart(string serviceName)
160         {
161             using (ServiceController control = new ServiceController(serviceName))
162             {
163                 if (control.Status == ServiceControllerStatus.Stopped)
164                 {
165                     control.Start();
166                 }
167             }
168         }
169         //停止服务
170         private void ServiceStop(string serviceName)
171         {
172             using (ServiceController control = new ServiceController(serviceName))
173             {
174                 if (control.Status == ServiceControllerStatus.Running)
175                 {
176                     control.Stop();
177                 }
178             }
179         }
180     }
181 }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/732376.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统启动的过程

目录操作系统,启动!大致过程重要程序bootsect.ssetup.shead.s 操作系统,启动! 大致过程 ​ 计算机的工作方式是取指执行,而执行其的前提是内存中有代码。操作系统刚开始并不是在内存中,而是在磁盘上,因此第一步需要将其以一定的方式从磁盘读入内存。(1)x86PC刚开机时C…

(我个人的)atcoder我的补题记录汇总

2024.06.27 : 根据题目难度和standing最后提交人数是否补题,大概在难度600及以下的 补完2024.06.22及之前的

最近在读《谁说菜鸟不会数据分析 SPSS篇》pdf分享

《谁说菜鸟不会数据分析(SPSS篇)》继续采用职场三人行的方式来构建内容,细致梳理了准专业数据分析的常见问题,并且挑选出企业实践中最容易碰到的案例,以最轻松直白的方式来讲好数据分析的故事。谁说菜鸟不会数据分析 SPSS篇 《谁说菜鸟不会数据分析(SPSS篇)》继续采用职…

TypeScript实现贪吃蛇效果

项目参考教程:贪吃蛇案例1.项目搭建 1.1 项目结构搭建 创建一个名为xxx的项目 项目初始化 npm init -y 安装后面需要用到的依赖,在package.json中查看 项目根目录创建名为tsconfig.json的文件并更改内容如下: {"compilerOptions": {"module": "ES2…

m基于Googlenet深度学习的运动项目识别系统matlab仿真,包括GUI界面

1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要基于GoogLeNet深度学习的运动项目识别系统,是利用深度神经网络技术,尤其是GoogLeNet架构,来自动识别视频或图像中的人类运动类型的过程。GoogLeNet(也称为Inception网络)在2014年由Google团队提出,因其高…

模拟集成电路设计系列博客——7.5.6 时间交错型ADC

7.5.6 时间交错型ADC 我们可以通过将多个ADC做并行来实现非常高速的ADC[Black, 1980]。下图展示了一个四通道时间交错型ADC的架构图:此处,\(\phi_0\)是一个四倍于\(\phi_1\)到\(\phi_4\)的速率的时钟。此外,\(\phi_1\)到\(\phi_4\)彼此都落后一个\(\phi_0\)的周期。这样每个…

(构造) CF1758D Range = √Sum

题意:思路:先钦定这个序列的和为4n^{2} ,那么差值就是2n 考虑一个初始序列1,2,3,⋯,n−1,2n+1.现在我们要做的就是将这个序列变成合法的我可以进行整体都+x的操作使得这个序列的和尽量逼近4n^{2}。直接算出每个数应该加上的x,还会有一点剩余,加到a[n-1]上即可,a[n-1]+n=…

Java探秘:揭秘栈帧的神秘面纱与内存占用之谜

哈喽,大家好,我是木头左!深入理解Java栈帧 在Java虚拟机(JVM)的运行时数据区中,每一个线程都有自己的栈(Stack),而栈中的每一个元素就是一个栈帧(Stack Frame)。当一个方法被调用时,一个新的栈帧会被创建并压入到栈中。这个栈帧包含了方法的局部变量、参数以及返回地…

数据库和Flask项目搭建

1 sqlalchemy原生操作 # 操作原生sql ---》用得少 import pymysql import threading # 1 导入 from sqlalchemy import create_engine from sqlalchemy.engine.base import Engine # 2 创建引擎 engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/cnblog…

flask定制Excel命令

定制excel命令并插入到数据库中 import osfrom flask import Flask from flask.cli import AppGroup import click import pymysql from openpyxl import load_workbookapp = Flask(__name__)@app.cli.group() def excel():"""Excel related commands."&qu…

flask的简单使用

1 flask介绍 #1 python 界的web框架-Django:大而全,你要的东西都有 [orm,缓存,认证]django-ninja-flask:小而精,所有web开发需要的东西,借助于第三方集成-web.py-----同步框架--进程线程架构--3.x以后支持异步--tornado sanicfastapi:高性能小而精,借助于第三方:orm…

模拟集成电路设计系列博客——7.5.5 折叠型ADC

7.5.5 折叠型ADC 我们刚了解完输入放大器的数量如何通过插值型架构来减少。但是对于一个N bit的ADC来说,仍然需要\(2^N\)个锁存比较器。这个大量的比较器数量可以通过折叠型ADC架构来减少。折叠型ADC架构类似于两步型ADC,一组LSB分离于一组MSB进行独立的查找。但是,相比两步…

240627构造

20240627构造专题 写在前面:出场即巅峰(明日模拟赛RP++) 一.何为构造 就是通过对一道题题面的分析可以发现某种规律(类似于不完全归纳法),然后发掘本质,就可以很快的解题,但是显然我还没有掌握 二.一些技巧 1.寻找特殊性质,从而求解 2.估算上界(也就是对最优情况进行…

别人工作8小时,我只需1小时!这些宝藏网站我都替你收集好了!

mac免费应用,效率工具,编程工具,设计网站,图片网站,通通一网打尽软件mac应用下载 很多破解版应该都可以找到snipaste: 截图工具,快捷截图,贴图等功能。幕布: 快速编辑思维导图。sublime text: 文档编辑器(打开速度贼快)。visual studio code: 新一代编辑器(插件非常…

VLC工具使用指南

一、引言 VLC(VideoLAN Client)是一款功能强大的免费开源跨平台多媒体播放器和框架,能够播放大多数多媒体文件以及DVD、音频CD、VCD和各种流媒体协议。无论是本地视频文件还是网络视频流,VLC都能轻松应对。本文将详细介绍VLC工具的基本用法和高级功能。 二、安装与设置 下载…

递归示例-指定数字以内的所有排列组合(Reduce)

指定数字以内的所有排列组合: 定义名称版:=pmtt(指定数字)pmtt=LAMBDA(x,IF(x=1,1,VSTACK(pmtt(x-1),REDUCE(SEQUENCE(x),SEQUENCE(,x-1)^0*x,LAMBDA(a,b,TOCOL(a&SEQUENCE(,b)))))))不定义名称版:=LET(fx,LAMBDA(npmtt,x,IF(x=1,1,VSTACK(npmtt(npmtt,x-1),REDUCE(SEQU…

nodejs解压zip/rar文件到本地,并获取到解压进度

方案:解压到本地的大小 / zip文件总大小(解压后的) ,得出解压进度 先得出解压后的文件大小,然后解压到本地const AdmZip = require("adm-zip"); const JSZip = require(jszip);// 指定ZIP文件的路径 const admZip = new AdmZip("D:\\Users\\whr4220\\Downloa…

畅联云看视频卡顿、画质不清原因可能是一些参数没有配置对

在畅联云平台观看视频时,很多用户可能会遇到卡顿和画质不清晰的问题。这些问题往往由多种因素共同导致,包括网络带宽与传输质量、视频编码与压缩、服务器性能与负载均衡,以及视频源质量等。本文我们将重点说一下摄像机上面的一些可能影响视频卡顿和画质的参数。 打开摄像机w…

R语言独立成分分析fastICA、谱聚类、支持向量回归SVR模型预测商店销量时间序列可视化|附代码数据

全文链接:http://tecdat.cn/?p=31948 原文出处:拓端数据部落公众号 本文利用R语言的独立成分分析(ICA)、谱聚类(CS)和支持向量回归 SVR 模型帮助客户对商店销量进行预测。 首先,分别对商店销量的历史数据进行了独立成分分析,得到了多个独立成分;其次,利用谱聚类方法…