Как скрыть окно консольного приложения с помощью планировщика задач Windows
Я написал небольшое консольное приложение, которое перемещает резервные копии баз данных с одного компьютера на другое по электронной почте.
Как это работает, на машине, на которой работает SQL-сервер, у меня есть задание, созданное с помощью SQL, который выполняет резервное копирование определенных баз данных на том, который находится на том же компьютере, но не на том же томе, что и Server 2008rC. операционная система включена.
Таким образом, каждую ночь около часа ночи задание выполняется и выполняет резервное копирование определенных баз данных на том, который я использую только для резервного копирования определенных элементов базы данных. Теперь, каждый вечер около двух часов ночи я запускаю задачу Windows, которая вызывает мое консольное приложение, это консольное приложение представляет собой приведенный ниже код, очень простой. Все, что он делает, - это извлекает базы данных, упаковывает их все в один zip-файл, а затем отправляет по электронной почте резервные копии баз данных на определенную электронную почту, и с этого момента базы данных хранятся в разных местах, так что у меня есть небольшая избыточность.
Вот мой вопрос (ы).
1.) Каков минимальный объем разрешений, которые я должен установить для корневой папки, в которой хранятся резервные копии баз данных, чтобы планировщик задач Windows мог вызывать мое консольное приложение, а мое консольное приложение, в свою очередь, считывает, пиши и удаляй. Я хотел бы установить минимальное количество разрешений.
2.) Как запустить консольное приложение, скрыв окно консоли, чтобы, если администратор вошел в систему, они не увидели это окно, когда консольное приложение вызывается с помощью этого планировщика задач 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 ответ
Я знаю, что через 3 года,
В Visual Studio, в свойствах проекта,
Выберите тип вывода для приложения Windows