windows服务定时任务
其实定时任务时不时会碰到,只不过解决方案也不是只有一个,网上也有很多文章,但是没有一篇说得很清楚,尤其是安装环节,今天就着重说一下安装,
其他步骤带过,C#开发windows服务,开发,安装,调试
1. 添加安装程序 (找的其他博客的配图)
之后我们可以看到上图,自动为我们创建了ProjectInstaller.cs以及2个安装的组件。
2)修改安装服务名
右键serviceInsraller1,选择属性,将ServiceName的值改为ServiceTest。
3)修改安装权限
右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。
2.业务代码(读取配置文件里面的所有节点,然后开启多个定时任务)app.config配置如下:
protected override void OnStart(string[] args)
{ NameValueCollection urls = ConfigurationManager.AppSettings; List<Timer> timers = new List<Timer> ();
int i =;
foreach (var item in urls)
{
try
{
string values = urls["url" + i];
string[] strs = values.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
string url = strs[];
int interval = Convert.ToInt32(strs[]);
Timer temp = new Timer();
temp.AutoReset = true;
temp.Interval = interval;
temp.Enabled = true;
temp.Elapsed += new ElapsedEventHandler((object sender, System.Timers.ElapsedEventArgs e) =>
{
try
{
Http.Get(url);
}
catch (Exception ex)
{
Log.LogResult(ex.StackTrace);
} });
temp.Start(); timers.Add(temp);
}
catch (Exception ex)
{ Log.LogResult("创建timer失败:"+ex.StackTrace);
}
i++;
}
}
3. 安装
如果项目是4.0的,那么要去 C:\Windows\Microsoft.NET\Framework\v4.0.30319 (V4.0开头的就行) 路径下面找到 InstallUtil.exe
项目如果是2.0的,那么找 C:\Windows\Microsoft.NET\Framework\v2.0.50727 (v2.0 开头就行) 路径下面找到 InstallUtil.exe
要将服务安装到哪台机就要去哪台机里面找,没有框架就装框架,如果复制本地的文件到远程服务器使用是不行的,微软有安全验证
将文件installUtil.exe 复制到 Debug目录下面
准备工作做好,开始安装: 以管理员身份打开cmd,然后进到Debug目录里面,先试试installutil.exe 有没有用
出现类似页面就说明有用,
执行命令 installutil serviceTest.exe(服务对应程序名称debug下面的 .exe )
如果出现安装成功字眼,并且没有出现错误字眼,说明服务安装成功
然后去服务里面找到这个服务
4.调试 (调试 => 附加到进程 )
windows服务无法直接运行调试,跟着步骤来: 启动服务才能附加进程调试
如果勾都打上了还找不到,就关闭这个窗口稍微等等再来一次,准能找到
然后就可以愉快的加断点调试了
如果改了代码,需要先停止服务 ,然后重新生成项目,再启动,然后重新附加进程
windows服务定时任务的更多相关文章
- 可视化Windows服务定时任务
思路:1.新建一个<Windows服务项目>,在里面建服务文件(可以多个),用来做要执行的任务. 2.新建一个<Windows窗体应用程序>,在这个程序里管理服务.如:安装.卸 ...
- windows服务 定时任务
1.c#程序做成windows服务 若用cmd安装: var path = Process.GetCurrentProcess().MainModule.FileName + " s&quo ...
- Windows服务中用Timer和线程两种方式来执行定时任务
在Service服务文件夹下新建Windows服务 - TestService
- 定时任务-C#线程类 windows服务
原理 最常用的就是C#中 timer类写一个定时方法,然后在把他宿主到windows服务里面. C#中Timer分类 关于C# Timer类 在C#里关于定时器类就有3个 C# Timer使用的方法 ...
- 不用写Windows服务实现定时器功能(FluentScheduler )
MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...
- C#实现对Windows 服务安装
Windows服务作用:定时用户消息推送,WEB程序实时统计等 Windows服务创建:C#创建服务的方式也有很多种,建议大家在做之前可以先全面了解一下这方面东西再去动手这样便于解决中间遇到一些比较棘 ...
- Quartz.Net在windows服务中的使用
写在前面 这几天在弄一个项目,需要定时抓取一些数据,当时也想直接用timer算了.因为之前也弄过这样的项目,但是一想,已经用过了,再去使用同一种思路,未免太乏味了.就换了一种新玩法.这里将之前看到的一 ...
- 使用Topshelf组件构建简单的Windows服务
很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方式也就会不同了.我个人觉得无论学习什么,都应该尝试着去了解 ...
- 使用NSSM把.Net Core部署至 Windows 服务
为什么部署至Windows Services 在很多情况下,很少会把.Net Core项目部署至Windows服务中,特别是Asp.net Core就更少了.一般情况下,Asp.net Core会部署 ...
随机推荐
- JAVA进阶21
1.Vector向量 如何选用ArrayList.LinkedList.Vector? ①需要线程安全时,用Vector ②不存在线程安全问题时,并且查找较多用ArrayList(一般使用它) ③不存 ...
- JAVA进阶18
间歇性混吃等死,持续性踌躇满志系列-------------第18天 1.飞机游戏小项目 ①创建窗口 package cn.xfj.game; import javax.swing.*; import ...
- MSSQL的简单盲注
方式一:遍历ascii码的方式 一.判断数据库类型 and (select count(*) from sysobjects)>0 二.获取数据库 and ascii(substring((se ...
- error while loading shared libraries: libopencv_core.so.3.4: cannot open shared object file: No such file or directory
1. 将CMakeLists.txt 文件中 find_package(OpenCV REQURED)补充完整为带版本号的:find_package(OpenCV 2.4.9 REQURED) 2. ...
- 2018-2019-2 网络对抗技术 20165221 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165221 Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 主要依托三种恶意软件检测机制. 基于特征码的检测:一段特征码就是一段或者多 ...
- Mac本地搭建kubernetes环境
前言:之前在windows上面的虚拟机上面手工搭建了kubernetes集群,但是环境被破坏了,最近想要继续学习k8s,手工搭建太费事,所以选择了minikube,完全能够满足个人的需求,其实在Win ...
- ActiveMQ与spring整合
第一步:引用相关的jar包 <dependency> <groupId>org.springframework</groupId> <artifactId&g ...
- tensorflow从入门到放弃-0
刚接触tensorflow一周,感觉还是有点难度的.遇到这么个问题 failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable devic ...
- Typescript---02 变量声明
声明变量: let和const是JavaScript里相对较新的变量声明方式.let在很多方面与var是相似的,但是可以避免在JavaScript里常见一些问题. const是对let的一个增强,它能 ...
- js |竖线字符串全部替换 replace
一般人解决方案: 'a|b|c'.replace(/\|/g, ','); 神经病解决方案: 'a|b|c'.split('|').join(',');