环境:

  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服务的更多相关文章

  1. 将可执行exe文件注册成windows服务

    要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe.Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行.这两个软件都包含 ...

  2. 使用ASP.NET实现Windows Service定时执行任务

    转载http://blog.csdn.net/yanghua_kobe/article/details/6937816 我们怎样才能在服务器上使用asp.net定时执行任务而不需要安装windows ...

  3. C# 创建系统服务并定时执行【转载】

    [转载]http://www.cnblogs.com/hfzsjz/archive/2011/01/07/1929898.html C# 创建系统服务并定时执行 1.新建项目 --> Windo ...

  4. Oralce 导出脚本命令,定时执行

    原文:Oralce 导出脚本命令,定时执行 @echo off @echo ================================================ @echo  window ...

  5. C#创建windows服务并定时执行

    一.创建window服务 1.新建项目-->选择Windows服务.默认生成文件包括Program.cs,Service1.cs 2.在Service1.cs添加如下代码: System.Tim ...

  6. .net 开发定时执行的windows服务

    环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...

  7. C# 编写windows服务及服务的安装、启动、删除、定时执行任务

    一.编写windows服务 1.VS2017  - 创建服务Myservice 2.创建好项目之后 --- >> 双击 Service1.cs  ---- >>  出现一个设计 ...

  8. Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行

    Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行 2016年01月03日 17:36:00 持之以恒 阅读数:5520 标签: windows定时任务.b ...

  9. 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现

    最近需要做一个定时任务功能,从网站找了很多相关的代码,windows实现方法综合起来大概就两种, 一.使用PHP ignore_user_abort 函数 即使关掉浏览器也能正常运行:(个人感觉PHP ...

随机推荐

  1. Confluence 6 编辑一个附加文件的属性

    你需要具有空间的 添加附件(Add Attachment)权限来编辑文件的属性. 希望编辑一个附加文件的属性: Go to  > Attachments 单击你希望编辑附件边上的 属性(Prop ...

  2. 图论小专题A

    大意失荆州.今天考试一到可以用Dijkstra水过的题目我竟然没有做出来,这说明基础还是相当重要.考虑到我连Tarjan算法都不太记得了,我决定再过一遍蓝皮书,对图论做一个小的总结.图论这个部分可能会 ...

  3. 【CUDA 基础】3.1 CUDA执行模型概述

    title: [CUDA 基础]3.1 CUDA执行模型概述 categories: CUDA Freshman tags: CUDA SM SIMT SIMD Fermi Kepler toc: t ...

  4. HFUUOJ1023 闷声发大财 概率dp

    题意 xyq有\(n\)个骰子,第\(i\)个骰子有\(a_i\)面,每次xyq都会把\(n\)个骰子搞一遍,其中的最小值作为结果,问最终结果的期望\(\mod (10^9+7 )\). 分析 lfx ...

  5. JavaWeb_ Servlet API(中文)

       Java Servlet 中文API Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包.这两个软件包的同时存在使得Java Se ...

  6. HDU 5831 Rikka with Parenthesis II ——(括号匹配问题)

    用一个temp变量,每次出现左括号,+1,右括号,-1:用ans来记录出现的最小的值,很显然最终temp不等于0或者ans比-2小都是不可以的.-2是可以的,因为:“))((”可以把最左边的和最右边的 ...

  7. python-matplotlib-ERROR

    在导入包显示画图时,出错:ImportError: No module named '_tkinter 解决办法:通常原因是tkinter和tk-devel缺失 ERROR: matplotlib的图 ...

  8. C++:#include和using namespace

    https://blog.csdn.net/u013719339/article/details/80221899

  9. 关于开发APP接口版本不兼容的问题

    关于 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改. 新的APP和接口开发后,接口如何兼容老的APP? 有的公司 每次发布完APP ...

  10. c#根据配置文件反射

    由于项目中用到了反射,准备把各个类库都先写在配置文件中,然后读取配置文件,再对配置文件中配置的类库进行反射. 这样做的好处是各个类库保持独立,其中一个类库出现问题不会影响其他类库,更新项目时,只要更新 ...