c#之添加window服务(定时任务)

本文详细介绍了如何使用windows服务创建定时任务的步骤。

1.首先,创建一个新的项目。在Windows桌面中,选择Windows服务选项。

c#之添加window服务(定时任务)

2.接着,右键点击项目,选择添加安装程序。

c#之添加window服务(定时任务)

3.在安装程序上右键点击serviceInstaller1,修改serviceName和Description。

c#之添加window服务(定时任务)

4.然后,在serviceProcessInstaller上右键点击,选择并修改Account为LocalSystem。

c#之添加window服务(定时任务)

5.在Service1中添加以下代码:

public partial class Service1 : ServiceBase{    private static EventLog eventLog1;    private int eventId = 1;    public Service1()    {        InitializeComponent();        eventLog1 = new System.Diagnostics.EventLog();        if (!System.Diagnostics.EventLog.SourceExists("MySource"))        {            System.Diagnostics.EventLog.CreateEventSource(                "MySource", "MyNewLog");        }        eventLog1.Source = "MySource";        eventLog1.Log = "MyNewLog";    }    protected override void OnStart(string[] args)    {        eventLog1.WriteEntry("In OnStart.");        log("In OnStart.");        Timer timer = new Timer();        timer.Interval = 60000;        timer.Elapsed += new ElapsedEventHandler(this.OnTimer);        timer.Start();    }    protected override void OnStop()    {        eventLog1.WriteEntry("In OnStop.");        log("In OnStop.");    }    protected override void OnContinue()    {        eventLog1.WriteEntry("In OnContinue.");        log("In OnContinue.");    }    public void OnTimer(object sender, ElapsedEventArgs args)    {        eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);        log("the timer");    }    private static void log(string message)    {        using (FileStream stream = new FileStream("D:log.txt", FileMode.Append))        using(StreamWriter writer=new StreamWriter(stream))        {            writer.WriteLine($"{DateTime.Now}:{message}");        }    }}

项目结构如图所示:

c#之添加window服务(定时任务)

6.右键点击并生成解决方案。

c#之添加window服务(定时任务)

7.打开项目,将bin目录复制到C盘下新建的windowServiceTest文件夹的windowService_Hello文件夹下,并从C:WindowsMicrosoft.NETFramework4.0.30319目录中复制InstallUtil.exe到windowServiceTest文件夹下。

c#之添加window服务(定时任务)c#之添加window服务(定时任务)

JoinMC智能客服 JoinMC智能客服

JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!

JoinMC智能客服 23 查看详情 JoinMC智能客服

8.安装服务:以管理员身份打开cmd,进入windowServiceTest文件夹,执行以下命令:

InstallUtil.exe  C:windowServiceTestwindowService_HelloinDebugWindowService_HelloWorld.exe

安装效果图:

c#之添加window服务(定时任务)

服务管理器中的效果图:

c#之添加window服务(定时任务)

9.打开服务管理器,启动MyService服务,等待几分钟后,卸载服务。卸载命令如下:

InstallUtil.exe  -u C:windowServiceTestwindowService_HelloinDebugWindowService_HelloWorld.exe

卸载效果图:

c#之添加window服务(定时任务)

10.检查效果:在D盘中找到log.txt文件,打开内容如下:

c#之添加window服务(定时任务)

Event Log的位置如图所示:

c#之添加window服务(定时任务)

由此可见,Windows服务上的定时任务已成功生效。

参考网址:https://www.php.cn/link/f17a5d67253e3c9c77404e31c6f25c55

以上就是c#之添加window服务(定时任务)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/353327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 23:29:49
下一篇 2025年11月5日 23:30:49

相关推荐

  • Go语言:使用构建约束实现App Engine与标准环境的条件代码编译

    本文详细介绍了如何在go语言项目中,针对google app engine (gae) 环境和标准环境实现条件代码编译。通过利用go的构建约束(`// +build appengine` 和 `// +build !appengine`),开发者可以优雅地处理特定于gae的包(如`appengine…

    2025年12月16日
    000
  • Go语言中韩文字符自动组合:深度解析go.text/unicode/norm包

    本文探讨在go语言中将分散的韩文子音和元音(jamo)组合成完整字符的有效方法。传统字符串替换效率低下,而unicode规范化提供标准化解决方案。通过`golang.org/x/text/unicode/norm`包的nfc形式,开发者可以高效、准确地实现韩文字符的自动组合,极大地简化了韩文文本处理…

    2025年12月16日
    000
  • Go语言中模拟Python式切片解包的多变量赋值

    在go语言中,直接将`strings.split`等操作返回的切片解包并赋值给多个变量,不像python那样简洁。本文将探讨两种主要的go语言实现方案:一是通过自定义返回多个值的辅助函数,提高特定场景下的代码可读性;二是通过使用可变参数的指针,实现更通用的切片解包功能,但需权衡代码复杂性与灵活性。这…

    2025年12月16日
    000
  • Go语言拼写检查器在处理大字符集语言时的性能瓶颈与优化

    本文深入探讨了Go语言实现Peter Norvig拼写检查算法时,在处理如韩语这类大字符集语言时遇到的“process took too long”性能问题。分析指出,核心瓶颈在于二次编辑距离(Edits2)计算过程中,庞大的字符集导致候选词数量呈指数级增长,远超英文字符集。文章提供了详细的性能分析…

    2025年12月16日
    000
  • Go语言跨环境数据库连接:利用构建约束优雅处理App Engine与标准SQL

    在go语言开发中,当项目需同时支持google app engine (gae) 的`appengine/cloudsql`包和标准环境的`database/sql`库时,常会遇到`cannot find package`错误。本教程详细阐述如何利用go的构建约束(`// +build appeng…

    2025年12月16日
    000
  • Go语言中韩文字符组合与Unicode规范化实践

    本文将探讨在go语言中如何将分离的韩语辅音和元音(jamo)组合成完整的韩文字符。传统字符串替换方法效率低下且不全面,正确的解决方案是利用unicode规范化,特别是nfc(normalization form c)。我们将介绍如何使用go的`golang.org/x/text/unicode/no…

    2025年12月16日
    000
  • Go语言中结构体切片指针作为方法接收器的限制与正确实践

    本文深入探讨了go语言中将结构体切片指针作为方法接收器时遇到的“无效接收器类型”和“无法迭代”问题。通过解释go对类型命名的要求,文章演示了如何通过定义具名类型来解决这些限制,并提供了在方法中正确迭代和修改结构体切片元素的最佳实践,避免因值拷贝导致的修改失效。 在Go语言中,开发者有时会遇到尝试将结…

    2025年12月16日
    000
  • Go语言中range循环的赋值目标:标识符与表达式的深入解析

    在go语言的`range`循环中,迭代结果可以赋值给两种不同的目标:标识符和表达式。标识符用于声明新的循环变量,而表达式则用于将值赋给现有的存储位置,如已声明的变量或通过指针引用的内存地址。理解这两种赋值方式的差异对于正确高效地使用`range`循环至关重要。 Go语言的range关键字提供了一种简…

    2025年12月16日
    100
  • 在Go语言中生成加密安全的会话令牌

    在构建web服务时,为用户生成安全的会话令牌至关重要,以防止未经授权的访问和会话劫持。本文将深入探讨为何需要加密安全的随机数来生成这些令牌,并提供使用go语言标准库`crypto/rand`实现这一目标的具体指南和代码示例,确保令牌具备高熵值,有效抵御猜测攻击。 会话令牌安全性:为何需要加密级随机数…

    2025年12月16日
    000
  • Go语言拼写检查器性能优化:解决韩语字符集导致的计算超时问题

    本文深入探讨了在go语言中实现peter norvig拼写检查算法时,处理韩语字符集导致的性能瓶颈。核心问题在于韩语字符集远大于英文字符集,使得计算编辑距离为2(edits2)的候选词时,组合数量呈指数级增长,导致程序计算超时。文章分析了问题根源,并提供了针对性的优化策略,包括限制搜索空间、采用高效…

    2025年12月16日
    000
  • App Engine Go delay包跨模块执行指南:避免默认模块陷阱

    本文详细阐述了在google app engine go环境中,如何解决`appengine.delay`包在跨模块场景下可能将延迟任务调度到错误模块的问题。当请求通过`dispatch.yaml`重定向到特定模块后触发延迟任务时,`appengine.delay.call`可能导致任务在`defa…

    2025年12月16日
    000
  • 深入理解App Engine Go延时任务跨模块执行机制

    在google app engine go环境中,当使用`appengine.delay.call`创建延时任务并期望其在特定非默认模块上执行时,可能会遇到任务实际在默认模块上运行的问题。本文将详细阐述这一常见挑战,并提供一种通过`appengine.delay.task`结合显式设置`host`请…

    2025年12月16日
    000
  • Go语言常见编译错误解析:结构体初始化与切片操作实践

    本文深入解析go语言中常见的编译错误,特别是关于结构体复合字面量、`append`函数的使用以及map的正确初始化。通过分析具体代码示例,详细阐述了go语言的语法规范和最佳实践,旨在帮助开发者避免这些常见的陷阱,提升代码质量和可维护性。 在Go语言的开发过程中,即使是经验丰富的开发者也可能遇到一些看…

    2025年12月16日
    000
  • Go语言调用Python函数并获取返回值:os/exec模块的正确实践

    本文详细阐述了如何在go程序中通过os/exec模块调用python函数并捕获其返回值。重点分析了常见的参数引用错误,即在传递python命令字符串时,不应手动添加额外的引号,因为exec.command会妥善处理参数的封装。通过正确构造命令参数,go程序能顺利执行python代码并获取期望的输出。…

    2025年12月16日
    000
  • Go语言实现文件实时追踪:模拟tail -f功能

    在go语言中,标准文件读取操作遇到文件末尾时会立即退出,无法实现类似`tail -f`的实时追踪功能。本教程将介绍如何利用`activestate/tail` go模块,高效且优雅地模拟`tail -f`命令,实现对持续增长文件的实时监控,有效避免eof错误,确保程序能够持续处理文件的新增内容。 1…

    2025年12月16日
    000
  • Golang如何使用组合模式实现树状结构

    组合模式通过统一接口处理树状结构,Go中用接口和嵌入实现;定义Component接口规范GetName和Print行为,File作为叶子节点直接输出名称,Directory作为容器持有一组Component并递归调用其方法,Add添加子节点,Print时传递层级缩进,最终构建如文件系统的树形结构,客…

    2025年12月16日
    000
  • 深入理解Go语言HTTP客户端PostForm请求体处理机制

    在使用go语言的`http.client.postform`(包括google app engine的`urlfetch.client`)发送post请求时,表单数据会作为请求体发送,而非存储在`resp.request.postform`字段中。`resp.request.postform`主要用…

    2025年12月16日
    000
  • Go语言实现文件实时追踪:模拟 tail -f 功能

    本文将探讨go语言中如何有效读取持续增长的文件,以模拟linux `tail -f` 命令的行为。针对标准文件读取遇到的eof问题,我们将介绍并演示如何利用第三方库 `activestate/tail` 来实现文件的实时追踪,包括其基本用法、关键特性及注意事项,帮助开发者轻松处理日志文件等动态数据流…

    2025年12月16日
    000
  • Go语言多文件管理与Web处理器及模板整合指南

    本文旨在详细阐述go语言中如何高效管理多个源文件,特别是针对web应用程序中的http处理器注册和html模板的集成。我们将探讨在单个包内通过`init()`函数分散注册处理器的方法,并强调将html模板独立存储的最佳实践,以提升代码可读性、可维护性及团队协作效率。 在构建任何规模的Go应用程序时,…

    2025年12月16日
    000
  • 如何在Golang中对HTTP Handler进行单元测试

    使用httptest可无需启动服务器测试HTTP Handler。1. 用httptest.NewRequest创建请求;2. 用httptest.NewRecorder记录响应;3. 调用Handler并验证状态码、响应体等。支持查询参数、路径参数、POST数据及Header、Cookie、重定向…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信