首页 > 系统相关 >VS2022创建Windows服务程序的方法步骤

VS2022创建Windows服务程序的方法步骤

时间:2022-10-20 20:56:20浏览次数:78  
标签:服务程序 filePath Windows 创建 System VS2022 using public

创建一个Windows服务程序

可以创建Windows服务程序

打开VS2022,新建项目。

在这里插入图片描述

在这里插入图片描述

创建成功后的目录结构如左侧所示,至此项目构建完成。

在这里插入图片描述

配置相关信息

添加安装程序

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

重新生成一下解决方案

在这里插入图片描述

至此配置完成。

脚本可执行文件

在工程目录的bin\Debug目录下 新建两个脚本文件–install.bat和uninstall.bat,分别用于安装服务和卸载服务。

在这里插入图片描述

install.bat

1 2 3 4 %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe %~dp0MyFirstWindowsService.exe Net Start MyFirstService sc config MyFirstService start=auto pause

简单说明

在这里插入图片描述

uninstall.bat

1 2 %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /u %~dp0MyFirstWindowsService.exe pause

至此配置完成。

执行脚本文件

执行安装脚本文件

在这里插入图片描述

可以右键我的电脑 -> 管理 找到服务,在右侧寻找我们自己的服务名称

在这里插入图片描述

在这里插入图片描述

执行卸载脚本文件

在这里插入图片描述

如果不能创建Windows服务程序

如果输入上述条件没有找到可创建的工程,点击安装多个工具和功能。

在这里插入图片描述

或者在某个工程的工具里点击获取工具和功能

自媒体培训

在这里插入图片描述

在这里插入图片描述

等待安装完毕,按上面的步骤来即可。

简单地使用

使用本机服务和定时器Timer,简单做一个WindowsService的记录日志。

创建一个新的Windows服务

按照上述步骤创建一个新的Windows服务,名为WindowsService2,并且服务名称为WindowsService2。

我们主要的代码在Service1.cs中写,选中该文件,右键选择查看代码。

在这里插入图片描述

记得在App.config中设置键值对 value是日志记录地址 可自行选择。

在这里插入图片描述

主要代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; using System.Timers; using System.IO; using System.Configuration;   namespace WindowsService2 {     public partial class Service1 : ServiceBase     {         public Service1()         {             InitializeComponent();         }         //创建定时器         public System.Timers.Timer ServiceTimer;         //从App.config中取值 这里我的日志文件位置在F:\log.txt 这里可以自行设置         public string filePath = ConfigurationManager.AppSettings["FilePath"];         //主要功能代码在这里写         protected override void OnStart(string[] args)         {             //日志记录方法             WriteLog(filePath, "启动服务。");             InitTimer();//初始化的定时器         }           protected override void OnStop()         {             //停止服务             WriteLog(filePath , "停止服务。");         }           public void InitTimer()         {             //设置定时器两秒执行一次             ServiceTimer = new System.Timers.Timer(2000);             //执行的操作为Excute             ServiceTimer.Elapsed += Excute;             //是否重复执行             ServiceTimer.AutoReset = true;             //是否执行Elapsed中的事件             ServiceTimer.Enabled = true;         }           public void Excute(Object o , System.Timers.ElapsedEventArgs e)         {             //判断是否执行             if (!File.Exists(filePath))             {                 //不存再则创建                 File.Create(filePath);             }             //再这里写入日志             string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");                     WriteLog(filePath, DateTime.Now.ToString(), "进行了操作。 日志文件路径位于: " + filePath + " AppSetting : " + ConfigurationManager.AppSettings["FilePath"]);         }         //写入日志文件         public static void WriteLog(string path, params string[] s)         {             //创建输入流             System.IO.StreamWriter writer = null;             try             {                 writer = new System.IO.StreamWriter(path, true);                 StringBuilder sb = new StringBuilder("");                 for (int i = 0; i < s.Length; i++)                 {                     sb.Append(" ");                     sb.Append(s[i]);                 }                 writer.WriteLine(sb.ToString());             }             catch (Exception ex)             {                 Console.WriteLine(ex.Message);             }               finally             {                 //关闭流 释放资源                 if (writer != null)                 {                     writer.Close();                     writer.Dispose();                 }             }         }     } }

执行结果

在这里插入图片描述

其他的问题

更改代码后需要重新生成

每次更改执行代码后需要右键项目 -> 重新生成,否则更改不会生效。

在这里插入图片描述

某些命名空间如无效需手动引入

以Configuration的命名空间举例,即使加了using System.Configuration; 也有可能出现ConfigurationManager无法使用,这时我们可以手动引入。

找到工程右侧引入,右键添加引用。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

脚本问题

编码问题

创建bat文件时,有时候字符集编码可能不对,导致脚本执行时出现问题,我们可以用Notepad3打开,更改编码格式为ANSI或者UTF-8。

在这里插入图片描述

权限问题

执行脚本文件时,需要右键以管理员身份运行,否则就会出现以下情况,导致服务安装失败。

在这里插入图片描述

空格问题

如果脚本某些地方出现空格,会导致脚本运行失败。
比如
在这里插入图片描述

会导致以下报错

在这里插入图片描述

 

标签:服务程序,filePath,Windows,创建,System,VS2022,using,public
From: https://www.cnblogs.com/fireicesion/p/16811242.html

相关文章

  • windows10安装MYSQL服务端
    一、下载安装包1.下载地址:点击mysql安装包下载链接:https://dev.mysql.com/downloads/mysql/,选择window版本,点击下载按钮2.解压缩到无中文字符的路径:二、配置环境变量1.......
  • 8-jenkins windows环境下配置自动构建启动项目(springboot,gitlab,maven)
    由于远程办公原因,所以我们的服务必须在一个内网,所以就想到使用jenkins来实现提交后自动构建项目启动,不需要再登录到内网操作。jenkins的安装很简单,网上一大片,然后gitlab......
  • Windows活动目录_票据——敬请期待!
    票据:域控&域机子之间的信任密钥【缺省40天更换一次】域用户登录过程域用户的账户密码(用信任密钥加密的)传递至域控;域控验证账户密码成功后,构造域用户SID和组SID(用信任......
  • Navicat for MySQL 批量执行多个 SQL 文件---Windows-Type命令
    1.背景描述有个同事给发了一个数据库初始化sql文件夹,里面是有99个.sql文件,而我本地的数据库客户端是NavicatforMySQL,不论是在数据库上右键运行SQL文件还是在查询界面的......
  • Windows活动目录_初识
    计算机组织形式工作组(用户本地登录时构造SID进行权限分配);域(统一身份验证与管理)域注意事项实体:域控、域用户、加入域的机子。  依赖的服务:netlogon服务强制刷新组策......
  • windows端ping 工具带时间戳保存ping记录到本地
    新建txt文件,复制代码保存到新建文件后,修改文件后缀为.bat文件后。双击运行后会在本地脚本相同路径生成日志记录文件@echooffset/phost=host:setlogfile=ping_%host......
  • UTM 4.0 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS
    UTM4底层基于QEMU,在Mac上安全的运行Windows、Linux和macOS,同时支持Intel处理器和Apple芯片,并且是开源免费的。WindowsLinux来到Apple芯片上UTM采用Ap......
  • 病毒&windows,linux机制
    前言以病毒流氓软件为引,了解windows,linux机制流氓软件p2p软件园360全家桶等等彻底删除文件,程序程序不要用系统带的卸载找到他本身程序的卸载exe,推荐用geek会自......
  • windows常用命令
    进程相关查看进程netstat-anto有端口号,pid等tasklist:有进程名字终结进程taskkill/f/t/pid数字tskill进程名称查询进程netstat|findstr名称taklist|find......
  • hybrid App原理介绍、环境搭建、打包(Cordova)及常见错误解析(windows环境)
    hybridApp原理介绍、环境搭建、打包(Cordova)及常见错误解析(windows环境):https://blog.csdn.net/u011350550/article/details/84637024?spm=1001.2101.3001.6650.7&utm_mediu......