对于在没有UI的后台运行的C#程序,我会使用什么类型的项目

本文关键字:项目 类型 什么 程序 UI 运行 后台 | 更新日期: 2023-09-27 17:59:26

我习惯于制作获胜表格或基于web的应用程序,这些应用程序通过用户界面启动代码。我需要创建一个在没有任何用户输入的情况下定期运行的程序。我将使用哪种类型的Visual Studio项目来创建此项目?如何在没有用户界面的情况下启动程序?

以下是该程序需要做的事情:

  • 用C#编写,asp.net带有SQL数据库
  • 不需要用户输入
  • 定期跑步(即每天下午1点)
  • 对SQL查询运行存储过程
  • 将SQL查询的结果输出到文本文件
  • 加密文本文件
  • 将多个文本文件压缩在一起
  • 将zip文件发送到URL

我想过创建一个获胜表单,然后让Windows计划任务调用它,但我不知道如何创建一个可以被Windows计划任务所调用的应用程序。我还担心有Windows任务,因为用户的计算机必须打开。我宁愿使用SQL作业(我更熟悉它们),但不确定如何从SQL中进行加密和文件管理,也不知道如何创建可以由SQL调用的应用程序(我通常有一个从SQL中检索数据的web应用程序)。

正如你所知,这对我来说是新的,所以任何建议(尤其是样本和资源链接)都会非常有用。非常感谢。

对于在没有UI的后台运行的C#程序,我会使用什么类型的项目

我不同意Windows服务的答案。虽然这肯定也会起作用,但就我个人而言,我会使用计划任务:https://technet.microsoft.com/en-us/library/cc748993(v=ws.11).aspx

我还没有亲自测试过,下面是一篇关于如何在不显示命令窗口的情况下运行计划任务的文章:http://www.howtogeek.com/tips/how-to-run-a-scheduled-task-without-a-command-window-appearing/

评论中关于使用SQL Server计划作业的建议对我来说也很合理。

这听起来像是Windows服务的完美候选者。

  • 在Visual Studio中,单击"文件"->"新建"->"项目"
  • 选择"Windows桌面"模板->并单击Windows服务

一旦创建了服务,就可以实例化一个System.Timers.Timer对象,并创建一个以特定间隔运行的事件:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
namespace My.New.Service
{
    public partial class MyService : ServiceBase
    {
        private System.Timers.Timer _timer;
        public MyService()
        {
            InitializeComponent();
        }
        protected override void OnStart(string[] args)
        {
            double interval = Double.Parse(ConfigurationManager.AppSettings["WindowsServiceTimer"].ToString());
            _timer = new System.Timers.Timer(interval); //Runs timer every X milliseconds
            _timer.Elapsed += _timer_Elapsed;
            _timer.Start();
        }
        void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
        }
        protected override void OnStop()
        {
        }
    }
}