服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - VS2022创建Windows服务程序的方法步骤

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

2022-12-06 14:04三文鱼先生 C/C++

本文主要介绍了VS2022创建Windows服务程序的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

创建一个Windows服务程序

可以创建Windows服务程序

打开VS2022,新建项目。

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

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

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

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

配置相关信息

添加安装程序

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

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

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

重新生成一下解决方案

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

至此配置完成。

脚本可执行文件

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

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

install.bat

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

简单说明

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

uninstall.bat

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

至此配置完成。

执行脚本文件

执行安装脚本文件

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

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

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

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

执行卸载脚本文件

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

 

如果不能创建Windows服务程序

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

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

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

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

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

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

 

简单地使用

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

创建一个新的Windows服务

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

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

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

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

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

主要代码

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();
              }
          }
      }
  }
}

执行结果

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

 

其他的问题

更改代码后需要重新生成

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

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

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

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

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

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

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

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

脚本问题

编码问题

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

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

权限问题

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

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

空格问题

如果脚本某些地方出现空格,会导致脚本运行失败。
比如
VS2022创建Windows服务程序的方法步骤

会导致以下报错

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

到此这篇关于VS2022创建Windows服务程序的方法步骤的文章就介绍到这了,更多相关VS2022创建Windows服务程序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_44717657/article/details/123499137

延伸 · 阅读

精彩推荐
  • C/C++C语言:位域和字节序

    C语言:位域和字节序

    计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法...

    一口Linux4382021-04-16
  • C/C++手把手教你如何优化C语言程序

    手把手教你如何优化C语言程序

    程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增...

    C语言教程网2252020-12-19
  • C/C++C语言中的const如何保证变量不被修改

    C语言中的const如何保证变量不被修改

    这篇文章主要给大家介绍了关于C语言中const如何保证变量不被修改的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...

    Xilaii3972021-10-29
  • C/C++详解C++编程中类的成员变量和成员函数的相关知识

    详解C++编程中类的成员变量和成员函数的相关知识

    这篇文章主要介绍了C++编程中类的成员变量和成员函数的相关知识,是C++入门学习中的基础知识,需要的朋友可以参考下 ...

    C++教程网4522021-03-13
  • C/C++C++控制台循环链表实现贪吃蛇

    C++控制台循环链表实现贪吃蛇

    这篇文章主要为大家详细介绍了C++控制台循环链表实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    PPPeyton11802021-09-03
  • C/C++C/C++ 获取Windows系统的位数32位或64位的实现代码

    C/C++ 获取Windows系统的位数32位或64位的实现代码

    这篇文章主要介绍了C/C++ 获取Windows系统的位数32位或64位的实现代码的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考...

    infoworld4642021-06-08
  • C/C++C++ 回调接口设计和二进制兼容详细

    C++ 回调接口设计和二进制兼容详细

    再开发视频编辑 SDK,SDK的回调接口设计成 C 风格,结构中放着一些函数指针,既然对外接口是 C++,为什么不直接使用 C++ 的虚函数?这篇文章便对这一问题...

    黄兢成11782022-01-19
  • C/C++C++11/14的新特性(更简洁)

    C++11/14的新特性(更简洁)

    这篇文章主要介绍了C++11/14的新特性(更简洁),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    小念之歌5812021-07-19