我写了一个小型控制台应用程序,通过电子邮件将备份数据库从一台机器移动到另一个机器。
这是如何工作的,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);
}
}
}
}
}
我知道这是3年后,
在Visual Studio中,在项目Properties中,
选择Windows应用程序的输出类型