首页 > 系统相关 >Windows服务开发实践

Windows服务开发实践

时间:2023-07-13 14:35:22浏览次数:31  
标签:WindowsServiceStudy 文件 exe 服务 Windows 实践 System 开发 using

Windows服务开发知识学习实践步骤

(1)在Visual Studio 创建项目时,选择创建Windows服务项目模板

(2)项目创建成功后的界面如下图。项目会自动生成一个Service1.cs文件,我们可以对他重命名FirstService.cs

 点击添加安装程序后,右侧解决方案出现了ProjectInstaller.cs,双击该文件,可看到它由两个文件构成:

 (3)点击serviceInstaller1文件,在右下角属性框修改如下几个属性信息:

  • ServiceName:服务名称
  • Description:描述
  • Display Name:显示名称
  • StartType:启动类型,可以设置为手动或自动

 点击serviceProcessInstaller1文件,在右下角属性框修改Account信息:指示用来运行此服务的账户类型,可以设置为LocalSystem

 (4)这样,以上创建widows服务前置操作已基本完成。查看FirstService.cs源码,可以看到OnStart()和OnStop()方法需要我们重写:

 (5)重写OnStart()和OnStop()方法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace WindowsServiceStudy
{
    public partial class FirstService : ServiceBase
    {
        public FirstService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WriteInfo("记录服务启动");
        }

        protected override void OnStop()
        {
            WriteInfo("记录服务关闭");
        }

        private string filePath = @"D:\个人文档资料\1-实际实践记录\1-windowsservice\ServiceLog.txt";

        private void WriteInfo(string info)
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            {
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine($"{DateTime.Now},{info}");
                }
            }
        }
    }
}

(6)保存---清理---重新生成。

此时在项目bin文件夹下会生成刚刚的.exe文件

 双击该文件,提示报错:

 (7)通过InstallUtil.exe执行自开发的Windows服务的.exe文件安装

在如下地址找到InstallUtil.exe文件:

 以管理员权限打开cmd,在命令框内使用命令: InstallUtil 后跟自开发服务的.exe文件的绝对地址   

如命令:installutil D:\个人文档资料\1-实际实践记录\1-windowsservice\WindowsServiceStudy\bin\Debug\WindowsServiceStudy.exe

若是卸载: installutil D:\个人文档资料\1-实际实践记录\1-windowsservice\WindowsServiceStudy\bin\Debug\WindowsServiceStudy.exe -u

执行过程、结果如下图:

 打开服务界面,可以看到服务已安装上:

 另外,要特别注意VS开发时属性的配置与实际服务显示各项的对应关系:

 

通过服务界面,启动或关闭服务后,记录的日志结果为:

 

标签:WindowsServiceStudy,文件,exe,服务,Windows,实践,System,开发,using
From: https://www.cnblogs.com/Jesuslovesme/p/17550362.html

相关文章

  • 关于本地开发对接前端的解决思路
    场景1:假设局域网启动了一个禅道(管理项目的一个后台系统),ip为10.10.119.66:8081,我当然可以直接通过10.10.119.66:8081来访问到禅道了。但是我还想让别人都用个域名www.lidisam.cn:8081来访问禅道。解决步骤:1打开 C:\Windows\System32\drivers\etc\hosts,并编辑添加一行如下:......
  • 迅为RK3568|RK3588开发板车牌识别|RKNPU2人工智能视频重磅更新!
     ......
  • 移动windows中的目录
    win10用一段时间后c盘的installer目录和temp目录特别大,我的达到了7G和14G,用以下方法能将其挪到其他盘:OK,I'vetakentheriskanditwasworthit-everythingworksnormally,butIhavefreedthe17GBonmySSDnow.Basically,thestepsare:RestartyourPC,press......
  • WPF开发中ReactiveUI.Fody的使用
    前面的开发一般我会使用PropertyChanged.Fody,但ReactiveUI.Fody也能实现类似的功能。安装Nuget包Install-PackageReactiveUI.FodyFodyWeavers.xml文件:<Weaversxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"......
  • 现代C++(Modern C++)基本用法实践:一、类型推导
    概述类型推导主要是依赖auto关键字和decltype关键字/运算符实现的,具体用法参考下面的例子。二者特点:auto用于声明时推导遍历decltype用于推导各种表达式,decltype(var)中var也是一种称为变量表达式的表达式二者都是在编译时进行推导。引用类型推断:decltype推断变量类型时......
  • 现代C++(Modern C++)基本用法实践:五、智能指针(Smart Pointers)
    概述c++效率较高的一个原因是我们可以自己定制策略手动申请和释放内存,当然,也伴随着开发效率降低和内存泄漏的风险。为了减少手动管理内存带来的困扰,c++提出了智能指针,可以帮助我们进行内存管理,有三种:std::unique_ptr是一种独占所有权的智能指针,它不允许多个指针指向同一个对......
  • 现代C++(Modern C++)基本用法实践:四、模板
    概述C++的模板是泛型编程思想的一种实现。C++是强类型语言,处处强调类型。同样的加法运算,int和float的加法运算需定义两个函数(重载),而使用模板则可以只用一个函数(见下面示例)。这类似我们面向对象所说的多态(定义加法运算,各个类型有不同的实现),所以是所谓静多态的一种实现方式,不同的......
  • 现代C++(Modern C++)基本用法实践:三、移动语义
    概述移动移动(move)语义C++引入了一种新的内存优化,以避免不必要的拷贝。在构造或者赋值的时候,如果实参是右值(或者左值由std::move转换成右值),便会匹配移动语义的函数调用如下述举例的Str(Str&&obj)。移动语义的本质是将资源(内存/句柄)转移给另一个对象,被转移资源的对象不应再被使......
  • 现代C++(Modern C++)基本用法实践:二、Lambda表达式
    概述lambda表达式,有时也被称为匿名函数。他提供了简短的,内联的函数对象。用法形式如:[capture](parameters)->return_type{body}具体用法如下文举例它的实现是由编译器决定的,在我的编译器上他是通过创建一个匿名类,通过重载()运算符,成为一个可调用对象,从而实现调用,类似://......
  • 现代C++(Modern C++)基本用法实践:七、范围遍历
    概述c++的for循环在语法上有些刻板,近几个版本对此进行了优化,支持了基于范围的for循环用法举例参考测试项目代码ModernCppTest/modrenc_range_for.cpp主要内容:数组遍历vector遍历字符串遍历map遍历#include"ModernCppTestHeader.h"#include<vector>#include<map>......