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

问题描述 投票:0回答:1

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

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

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

这是我的问题。

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);
                    }
                }
            }
        }
    }
c# console-application .net-4.5 windows-scheduler
1个回答
0
投票

我知道这是3年后,

在Visual Studio中,在项目Properties中,

选择Windows应用程序的输出类型

© www.soinside.com 2019 - 2024. All rights reserved.