【问题标题】:Create an EXE file from a C# method in Windows Forms [closed]从 Windows 窗体中的 C# 方法创建 EXE 文件 [关闭]
【发布时间】:2014-06-27 01:32:45
【问题描述】:

我有一个发送电子邮件的 Windows 窗体应用程序。每封电子邮件都有一个发送时间 (dateTime)。

我想在 Windows 中创建一个计划任务,每天在我的数据库上运行查询并获取当天应该发送的电子邮件。

我想通过执行此工作的函数创建一个 .exe 文件,然后将调度程序设置为每天运行该 .exe 文件。

我该怎么做?

这是在预定时间完成工作的正确方式吗?

【问题讨论】:

  • 您可能希望创建一个控制台应用程序作为单独的项目,并将其作为计划任务运行。
  • “正确方式”是主观的。有多种方法。 Windows 任务计划程序、Quartz.NET 或编写您自己的计划程序。

标签: c# scheduled-tasks exe


【解决方案1】:

我写了一个做类似事情的应用程序。这是一个可以以交互方式使用的 Windows 窗体应用程序,也可以作为计划任务运行。

这是我的 Program.cs:

static class Program
{
    static void Main(string[] args)
    {
        if (args.Length == 0)
        {
            autoStart = false;
        }
        else if (args[0] == "AUTO")
        {
            autoStart = true;
        }
        Application.Run(new frmMain());
    }

    public static bool autoStart;
}

要以交互模式运行程序,程序是通过双击其EXE文件来执行的。

如果要从计划任务中调用它,请在调用程序时提供参数 AUTO。

当作为计划任务运行时,不应进行任何输入/输出操作,即严格禁止 MessageBox.Show 或类似的操作。

加载表单的事件处理程序:

private void frmMain_Load(object sender, EventArgs e)
{
     // Initialization of fields in frmMain
     .
     .



    if (Program.autoStart)
    {
        MailSend();
        Application.Exit();
    }
}

交互式工作的事件处理程序:

private void btnMailSend_Click(object sender, EventArgs e)
{
    MailSend();
}

发送邮件的函数:

private void MailSend()
{

    // Code to prepare and send mail
    //
    .
    .

    if (!Program.autoStart)
    {
        MessageBox.Show("Mail sent to recipients");
    }
}

【讨论】:

  • 谢谢,这正是我想要的。
【解决方案2】:

创建一个控制台应用程序。这将构建为一个简单的 .exe 文件。然后在您的 Windows 调度程序中调度控制台应用程序。

如果你想共享“邮件”逻辑,你可以把它放在一个 .dll 文件中,并在两个项目中使用 .dll 文件。

【讨论】:

  • 为什么每个人都建议使用控制台应用程序?有一个控制台窗口有什么意义?只需创建一个不显示 UI 的标准应用程序。
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多