2014-07-13 1 views
0

J'ai écrit une petite application de console qui déplace les bases de données sauvegardées d'une machine à une autre par courrier électronique.Comment masquer la fenêtre de l'application console avec le planificateur de tâches Windows

Comment cela fonctionne, la machine sur laquelle le serveur SQL est allumé J'ai un travail créé avec SQL qui sauvegarde des bases de données spécifiques sur un stockage de volume qui est dans la même machine mais pas sur le même volume lorsque le système d'exploitation Server 2008rC est activé. Par conséquent, tous les soirs, vers 1 heure du matin, le travail s'exécute et sauvegarde des bases de données spécifiques sur un volume que j'utilise uniquement pour sauvegarder des éléments spécifiques à la base de données. Maintenant, tous les soirs vers 2 heures du matin, j'exécute une tâche Windows qui appelle mon application console, cette application console est le code ci-dessous et est très simple. Tout ce qu'il fait est de récupérer les bases de données, les zips tous dans un fichier zip, puis envoie les bases de données sauvegardées à un e-mail spécifique, et à partir de ce point les bases de données sont stockées à différents endroits.

Voici ma (mes) question (s).

1.) Quelle est la quantité minimale d'autorisations que je devrais définir sur le dossier racine dans lequel les bases de données sauvegardées sont stockées afin que le planificateur de tâches Windows puisse invoquer mon application console, et à mon tour mon L'application console lit, écrit et supprime. Je voudrais définir le nombre minimum d'autorisations. 2. Comment exécuter l'application de la console en masquant la fenêtre de la console de sorte que si un administrateur est connecté, cette fenêtre ne s'affiche pas lorsque l'application de la console est appelée via le planificateur de tâches Windows. Maintenant, on m'a dit que je peux définir mon application à un formulaire Windows à partir d'une application de console et cela va résoudre mes problèmes de fenêtre, mais ma question est que cela signifie que tous les jours à 2h du matin cela créera une nouvelle fenêtre les fenêtres restent actives? En d'autres termes, j'ai besoin d'exécuter cette application de console, l'application de console doit faire ce que la tâche est à faire, et j'ai besoin de l'application console pour terminer et ne plus fonctionner jusqu'à 24 heures plus tard à 2h du matin.

Voici tout le code qui crée le fichier zip, envoie le fichier zip par e-mail et supprime le fichier zip. Quelle direction dois-je prendre ici?

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); 
        } 
       } 
      } 
     } 
    } 
+0

Vous devriez vraiment utiliser quelque chose comme SSIS et SQL Server Agent pour le faire. – siride

+0

Ok, je vais essayer. –

Répondre

0

Je sais qu'il est au bout de 3 ans,

Dans Visual Studio, dans les propriétés du projet,

Sélectionnez le type de sortie à application Windows

Questions connexes