.NET Framework 技术分享,C# 编写 Windows 定时服务应用程序

发布用户:小梦

2022/11/27 11:30


在 .NET Framework 平台中编写 Windows 服务 算是一件比较容易的事情。首先打开 Visual Studio 创建一个名为 Windows 服务 的项目,创建后看到的是一个 .cs 文件的设计界面,用鼠标右键单击可以看到几个菜单,点击添加安装程序后又会转到另一个 .cs 文件的设计界面,这个界面上默认有两个组件,一个叫 serviceProcessInstaller1,另一个叫 serviceInstaller1,其中 serviceInstaller1 组件的属性窗口如下:

Description 属性和 DisplayName 属性分别指服务的描述和名字,ServiceName 属性指服务的进程名字,StartType 属性指服务的启动类型,这里选择 Automatic 的意思为自动启动;这里把 serviceProcessInstaller1 组件的 Account 属性修改为 LocalSystem,要不然等到安装服务的时候可能会出现要求输入用户名和密码的对话框。

服务安装组件的配置已经完了,现在转到服务的代码位置,还是在刚才那个右键菜单位置,点击“查看代码”就可以看到服务要执行的代码,我编写如下代码:

using System;
using System.ServiceProcess;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        System.Timers.Timer timer = new System.Timers.Timer();
        protected override void OnStart(string[] args)
        {
            timer.Interval = 1000;
            timer.AutoReset = true;
            timer.Enabled = true;
            timer.Start();
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timertick);
        }
        private void timertick(object source, System.Timers.ElapsedEventArgs e)
        {
            System.IO.FileStream fs = new System.IO.FileStream("D:\\log.txt", System.IO.FileMode.Append);
            System.IO.StreamWriter sw = new System.IO.StreamWriter(fs);
            sw.WriteLine(DateTime.Now.ToString());
            sw.Close();
            fs.Close();
        }
        protected override void OnStop()
        {
        }
    }
}

OnStart 方法中的代码会在服务启动时执行一次,所以这里我用了一个定时器无限执行;OnStop 方法中的代码会在服务停止时执行。

服务程序编译后依然会是 .exe 文件,只不过不能够直接运行,这里需要使用 .NET Framework 提供的程序来安装我们编写的服务(使用CMD),安装服务的命令如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\WindowsService1.exe

注意命令需要用管理员权限执行,InstallUtil 程序的路径可能会不一样,这个根据 .NET Framework 安装时的路径决定,卸载服务的命令如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u D:\WindowsService1.exe

服务安装成功后可以在 Windows 服务管理程序中找到:



代码写多了,脑力不够用了,请我喝杯咖啡提提神 ☕

警告!禁止网络诈骗、非法集资、非法套现等法律外的缘由转账汇款,你的赞赏转账请考虑再三后支付,此收款不作任何形式的退款。





金额:

* 支付宝支付后如果没有自动返回请手动返回此页并刷新。



* 在线内容服务不支持任何形式的退款/退费操作;支付后的订单记录可以在“用户主页 - 用户订单中心”查看。

此网站可能不完全兼容您目前的浏览器!
此页随时可能被替换下线,请不要依赖此页功能!
此页正在维护更新,可能会出现错误或卡顿。
通知 & 公告

暂时还没有消息