定时执行exe、windows任务计划、windows服务
环境:
Windows10 + VS2015 + SQL Server2014 + .NET Framework4.5 + C# + WCF
问题:
业务功能需要,做了一个windows应用程序供主程序点击按钮调用,但这只是有特别需要时的可操作入口,需求是最好做成定时触发自动启动。
解决:
以前没做过,首先想到的是控制台应用程序加Timer计时器定时触发,但是想想控制台随便被别人关闭了可咋整【手动笑哭】。然后就想到了服务,百度之时发现【windows任务计划程序功能】很能满足这种定时任务需求,遂尝试了一下,果真很好用,在此献上其一二使用说明链接:
链接一:https://jingyan.baidu.com/article/47a29f242a580bc014239939.html (Win7\Win8)
链接二:https://jingyan.baidu.com/article/fedf0737a4c74735ac897786.html (Win10)
但是我担心使用任务计划功能对我们的程序和业务来说不太正规,所以还是想研究一下服务。我们主程序有自己的服务的,所以我尝试在服务启动时加计时器,隔一段时间(比如一分钟)就判断当前时间是否等于服务端配置文件配置的时间,如果相等就启动EXE。这种做法我想对主程序服务性能会不会有一点影响,于是接着研究单纯的做一个Windows服务,在这个服务里去计时触发条件启动EXE。下附两个参考文章链接:
链接三:https://www.cnblogs.com/goto/p/4172274.html (使用命令安装服务)
链接四:http://www.cnblogs.com/LoveJenny/archive/2013/03/05/2943691.html (使用VS外部工具添加服务安装工具)
在使用命令安装服务的过程中,我主要遇到以下两个问题:
在“安装”阶段发生异常:这个好像是用管理员运行命令程序解决的。
在安装的“提交”阶段发生异常:这好像是链接三里的ProjectInstaller_Committed方法(实现安装后自动启动服务)导致的,我注释掉这个方法就可以成功提交了,只是后面要自己手动启动服务。
这种方法实现了,问题又来了,一个功能我要用两个EXE实现,是不是麻烦了点,被调用的那个EXE可不可兼具windows服务性质呢?于是我又百度了下,还真找到了一篇不错的分享,这里奉上链接并感谢博主!
.NET创建一个既是可执行程序又是Windows服务的exe:https://www.cnblogs.com/yzeng/p/4205533.html
其实就是在现有EXE的项目里添加那个windows服务类,在这个类的onstart和onstop事件里写计时及条件,其他还是照旧。这里还是有些问题需要记录一下:
一是如果这个EXE是以服务运行,当在指定时间点触发功能方法时,功能方法在执行过程中会报以下错误(由于功能方法涉及窗体及第三方控件):当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“43c3ef10-8fe6-45cd-a65b-1792fd3fb9de”。由于这个项目的特殊性,网上大多数的解决办法(应用程序的主方法上指定 [STAThread] 指令。 将此方法在执行时 ApartmentState 属性设置为该线程为STA 。)是不适用的,最终解决办法是新建一个单线程单元,在这里执行功能方法。下附部分代码:
暂写到这里,后续补充一些相关截图。
定时执行exe、windows任务计划、windows服务的更多相关文章
- 将可执行exe文件注册成windows服务
要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe.Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行.这两个软件都包含 ...
- 使用ASP.NET实现Windows Service定时执行任务
转载http://blog.csdn.net/yanghua_kobe/article/details/6937816 我们怎样才能在服务器上使用asp.net定时执行任务而不需要安装windows ...
- C# 创建系统服务并定时执行【转载】
[转载]http://www.cnblogs.com/hfzsjz/archive/2011/01/07/1929898.html C# 创建系统服务并定时执行 1.新建项目 --> Windo ...
- Oralce 导出脚本命令,定时执行
原文:Oralce 导出脚本命令,定时执行 @echo off @echo ================================================ @echo window ...
- C#创建windows服务并定时执行
一.创建window服务 1.新建项目-->选择Windows服务.默认生成文件包括Program.cs,Service1.cs 2.在Service1.cs添加如下代码: System.Tim ...
- .net 开发定时执行的windows服务
环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...
- C# 编写windows服务及服务的安装、启动、删除、定时执行任务
一.编写windows服务 1.VS2017 - 创建服务Myservice 2.创建好项目之后 --- >> 双击 Service1.cs ---- >> 出现一个设计 ...
- Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行
Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行 2016年01月03日 17:36:00 持之以恒 阅读数:5520 标签: windows定时任务.b ...
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
最近需要做一个定时任务功能,从网站找了很多相关的代码,windows实现方法综合起来大概就两种, 一.使用PHP ignore_user_abort 函数 即使关掉浏览器也能正常运行:(个人感觉PHP ...
随机推荐
- clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- Python基础之注释
有时候我们写的东西不一定都是给用户看的,或者不希望解释器执行,那么我们可以选择注释掉代码. 被注释的内容是不会执行的,可以方便在以后能读懂代码. 注释分为两种,一种是单行注释,一种是多行注释. 单行注 ...
- jQuery文档操作之修改操作
replaceWith() 语法: $(selector).replaceWith(content); 将所有匹配的元素替换成指定的string.js对象.jQuery对象. // 将所有的h5标题替 ...
- 05.用两个栈实现队列 Java
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 进栈: 直接进stack1 出栈: 若stack2不为空,则出栈. 否则,当stack1不为空时, ...
- PHP ob_get_level嵌套输出缓冲
PHP的输出缓存是可以嵌套的.用ob_get_level()就可以输出嵌套级别. 测试发现在cli和浏览器下输出结果不一样(PHP5.4). ob_level1.png手册说明如下: ob_get_l ...
- python中列表的简单用法
1.定义list >>> li = ["a", "b", "mpilgrim", "z", " ...
- sklearn4_混合分类器
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- linux读xml文件问题
由于从配置文件中读取到的路径名的最后多了个0x0A,害我折腾了半天. 提示也很奇葩: I/O warning : failed to load external entity 关键是从这个提示看不出是 ...
- Oracle 字段监控 ( column monitor)
Oracle 字段监控 ( column monitor) */--> Oracle 字段监控 ( column monitor) Table of Contents 1. 开启与关闭 2. 字 ...
- Cookie类
Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.String name, java.lang.String value) 2)设置cookie void ...