如何使用Windows任务调度程序隐藏控制台应用程序窗口

时间:2014-07-13 14:49:55

标签: c# console-application .net-4.5 windows-scheduler

我编写了一个小型控制台应用程序,通过电子邮件将备份数据库从一台计算机移动到另一个位置。

这是如何工作的,SQL服务器所在的机器我已经创建了一个用in-SQL创建的作业,该作业将特定数据库备份到与同一台计算机相同但不在同一卷上的卷存储Server 2008rC操作系统已启用。

因此,每天凌晨1点左右,作业运行并将特定数据库备份到我仅用于备份数据库特定项目的卷。 现在,每天凌晨2点左右,我正在运行一个调用我的控制台应用程序的Windows任务,这个控制台应用程序是下面的代码,非常简单。它所做的只是检索数据库,将它们全部压缩成一个zip文件,然后通过电子邮件将备份的数据库通过电子邮件发送到特定的电子邮件,从那时起数据库就存储在不同的位置,这样我就可以获得一些冗余。 / p>

这是我的问题。

1。)我应该在存储备份数据库的Root文件夹上设置的最小权限是多少,以便Windows任务计划程序能够调用我的控制台应用程序,然后我的控制台应用程序执行读取,写入和删除操作。我希望设置最小数量的权限。

2.。)如何通过隐藏控制台窗口来运行控制台应用程序,以便在管理员登录时,当通过该Windows任务调度程序调用控制台应用程序时,他们看不到该窗口。现在,我被告知我可以从控制台应用程序将我的应用程序设置为Windows窗体,这将解决我的窗口问题,但我的问题是这意味着每天凌晨2点这将创建一个新窗口,窗户保持活跃?换句话说,我需要运行这个控制台应用程序,控制台应用程序需要执行它的任务设置要做的事情,并且我需要控制台应用程序完成消亡而不再运行直到24小时后凌晨2点。

以下是创建zip文件,通过电子邮件发送zip文件以及删除zip文件的所有代码。 我应该在这方面采取什么方向?

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;

    namespace SendDatabaseMail
    {
        class Program
        {
            static void Main(string[] args)
            {

                string supportEmail = System.Configuration.ConfigurationManager.AppSettings["supportemail"],
                       dataFolder = System.Configuration.ConfigurationManager.AppSettings["datafolder"],
                       zippedFolder = System.Configuration.ConfigurationManager.AppSettings["zippedfolder"],
                       zippedfilename = System.Configuration.ConfigurationManager.AppSettings["zippedfilename"],
                       smtpServer = System.Configuration.ConfigurationManager.AppSettings["smtpserver"],
                       smtpPort = System.Configuration.ConfigurationManager.AppSettings["smtpport"],
                       mailSubject = System.Configuration.ConfigurationManager.AppSettings["mailsubject"],
                       mailBody = System.Configuration.ConfigurationManager.AppSettings["mailbody"],
                       mailPassword = System.Configuration.ConfigurationManager.AppSettings["mailpassword"],
                       databasesRepository = System.Configuration.ConfigurationManager.AppSettings["databasesrepository"];


                string repositoryPath = databasesRepository + "/" + dataFolder,
                       zipPath = databasesRepository + "/" + zippedFolder;

                if (Directory.GetFiles(repositoryPath).Length > 0)
                {

                    try
                    {
                        using (System.Net.Mail.MailMessage mm = new MailMessage(new MailAddress(supportEmail), new MailAddress(supportEmail)))
                        {
                            mm.Subject = mailSubject;
                            mm.Body = mailBody;

                            ZipFile.CreateFromDirectory(repositoryPath, zipPath + "/" + zippedfilename);

                            mm.Attachments.Add(new Attachment(zipPath + "/" + zippedfilename));

                            using (SmtpClient smtp = new SmtpClient(smtpServer, short.Parse(smtpPort)))
                            {
                                smtp.Credentials = new System.Net.NetworkCredential(supportEmail, mailPassword);
                                smtp.EnableSsl = true;
                                smtp.Send(mm);
                            }
                        }
                    }
                    catch (Exception ex)
                    { }

                    if (File.Exists(zipPath + "/" + zippedfilename))
                    {
                        File.Delete(zipPath + "/" + zippedfilename);
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我知道这是3年后,

在Visual Studio中,在项目Properties中,

选择 Windows应用程序

的输出类型