zoukankan      html  css  js  c++  java
  • 定时执行exe、windows任务计划、windows服务

    环境:

      Windows10 + VS2015 + SQL Server2014 + .NET Framework4.5 + C# + WCF

    问题:

      业务功能需要,做了一个windows应用程序供主程序点击按钮调用,但这只是有特别需要时的可操作入口,需求是最好做成定时触发自动启动。

    解决:

      以前没做过,首先想到的是控制台应用程序加Timer计时器定时触发,但是想想控制台随便被别人关闭了可咋整【手动笑哭】。然后就想到了服务,百度之时发现【windows任务计划程序功能】很能满足这种定时任务需求,遂尝试了一下,果真很好用,在此献上其一二使用说明链接:

      链接一:https://jingyan.baidu.com/article/47a29f242a580bc014239939.html  (Win7Win8)

      链接二: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 。)是不适用的,最终解决办法是新建一个单线程单元,在这里执行功能方法。下附部分代码:

      

        暂写到这里,后续补充一些相关截图。

      

      

  • 相关阅读:
    2011.9.27到某公司的Android面试(C/java/Android)题目总结
    Android点滴(9) Android 不显示标题栏和全屏的设置方法
    android点滴(11) Android常用命令
    android点滴(7) Linux Proc虚拟文件系统—Android CPU、内存、网络流量获取
    [CSharp]静态构造函数
    机械式和液压式轮胎定型硫化机的性能特点和选用
    Python操作MySQL的一个报错:IndexError: out of range
    C#代理类型学习记录(拷贝的代码哈哈)
    轮胎硫化机
    CP48″液压式轮胎定型硫化机
  • 原文地址:https://www.cnblogs.com/gc001279/p/9428476.html
Copyright © 2011-2022 走看看