环境:

  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. TensorFlow使用记录 (六): 优化器

    0. tf.train.Optimizer tensorflow 里提供了丰富的优化器,这些优化器都继承与 Optimizer 这个类.class Optimizer 有一些方法,这里简单介绍下: 0 ...

  2. 一键生成koa/koa2项目

    1. npm install -g koa-generator 安装生成器 2.执行 koa mytest (koa1项目) koa2 koa2test (koa2项目) 3.进入目录 cd koa2 ...

  3. 20.Python类型转换,Python数据类型转换函数大全

    虽然 Python 是弱类型编程语言,不需要像 Java 或 C 语言那样还要在使用变量前声明变量的类型,但在一些特定场景中,仍然需要用到类型转换. 比如说,我们想通过使用 print() 函数输出信 ...

  4. 给string定义一个扩展方法

    创建一个 static 的类,并且里面的方法也必须是static的,第一个参数是被扩展的对象,必须标注为this,使用时,必须保证namespace using进来了. 实例: using Syste ...

  5. shell编程-定时删除(30天)文件

    1.创建shell touch /opt/auto-del-30-days-ago.sh chmod +x auto-del-30-days-ago.sh 2.编辑shell脚本: vi auto-d ...

  6. pycharm创建.py文件时,自动添加头文件注释

    File->settings->Editor->Code Templates->Python Script 添加以下代码: #!/usr/bin/env python # -* ...

  7. 浏览器是如何处理页面元素的Download?

    首先,浏览器对于script的下载是避免并行进行的.HTTP/1.1协议中规定浏览器和同一host之间只建立最多两个连接,也就是说允许的最 大并行度为2(当然,对IE和Firefox来说,你都可以通过 ...

  8. apt 软件安装问题

    1.sudo apt-get update由于没有公钥,无法验证下列签名: NO_PUBKEY F42ED6FBAB17C654 解决方法:安装公钥 sudo apt-key adv --keyser ...

  9. javascript之Screen(屏幕)对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. http常见状态码分析

    200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果 301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化, ...