自动运行控制台应用程序无需单击.exe文件

时间:2018-07-21 06:42:09

标签: c# console

我有一个使用C#构建的控制台应用程序,正在发送电子邮件应用程序。

当某人下订单时,它将向客户发送电子邮件。

这是我的应用程序中的代码:

static void Main(string[] args)
{
    int sleepingTime = int.Parse(ConfigurationSettings.AppSettings["SleepInMiliSecond"]);
    while (true)
    {
        StartRunning();
        Log("Sleep for a while...");
        Thread.Sleep(sleepingTime);
    }            
    //Environment.Exit(0);
}
private static void StartRunning()
{
    Log("Process Start Running...");
    ProcessWarranty();
    CheckEmailSendingResult();
    Log("Process End...");

}

我的问题是仅当我单击.exe文件时,该应用程序才能运行。有什么方法可以使它自动发送电子邮件而无需单击.exe文件?

2 个答案:

答案 0 :(得分:0)

在这种情况下,我将使控制台应用程序成为服务或后台进程。否则,您将必须具有某种运行exe文件的触发事件。

最简单(也是最肮脏的)方法是使while循环永久运行,该循环检查是否应该发送邮件,在必要时发送邮件,并仅在按ctrl + c或类似的命令时终止。

while(true)
{
    if(aNewEmailShouldBeSent)
    {    
        SendEmail("somemail.txt");
        Console.WriteLine("I sent an email");
    }

    //Wait some time in order to "slow down" the loop
    Thread.Sleep(10000);
}

如果您想以更合适的方式进行操作,我将推荐Peter Kottas的WindowsService库:https://github.com/PeterKottas/DotNetCore.WindowsService

答案 1 :(得分:0)

您可以在应用程序中使用计时器,并根据计时器间隔发送电子邮件,如下所示:

 private static System.Timers.Timer EmailTimer;
    static void Main(string[] args)
    {
        int sleepingTime = int.Parse(ConfigurationSettings.AppSettings["SleepInMiliSecond"]);
        EmailTimer = new System.Timers.Timer();
        EmailTimer.Elapsed += Timer_Elapsed;
        EmailTimer.Enabled = true;
        EmailTimer.Start();
    }
    private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        EmailTimer.Enabled = false;
        try
        {
            StartRunning();

        }
        finally
        {
            EmailTimer.Enabled = true;
        }

    }

    private static void StartRunning()
    {
        Log("Process Start Running...");
        ProcessWarranty();
        CheckEmailSendingResult();
        Log("Process End...");

    }