Vista Schedule Task De Setup

Je déploie une application C # à l’aide du projet d’assistant d’installation de Visual Studio 2008.

Pour moi, quel est le moyen le plus simple d’avoir Windows pour que mon application soit exécutée à intervalles réguliers (toutes les 8 heures, par exemple)? Je préfère que cette planification se produise lors de l’installation de l’application pour simplifier la configuration pour l’utilisateur final.

Merci!

La tâche planifiée est votre chemin à parcourir. Regardez cette page pour savoir comment configurer la tâche avec un script .

Cela a pris un peu de travail pour moi, alors voici une documentation complète pour la planification d’une tâche à partir d’un projet d’installation.

Une fois votre projet de déploiement créé, vous devrez utiliser des actions personnalisées pour planifier la tâche. Procédure pas à pas: création d’une action personnalisée

Remarque: La procédure pas à pas vous demande d’append la sortie principale au nœud d’installation, même si vous n’envisagez aucune opération personnalisée pendant l’étape d’installation. C’est important, alors ne l’ignore pas comme je l’ai fait. La classe d’installation effectue une gestion des états au cours de cette étape et doit être exécutée.

L’étape suivante consiste à transmettre le répertoire d’installation à l’action personnalisée. Cela se fait via la propriété CustomActionData . J’ai entré /DIR="[TARGETDIR]\" pour le noeud de validation (je planifie ma tâche au cours de l’étape de validation). MSDN: propriété CustomActionData

Enfin, vous devrez soit accéder à l’API de planification des tâches, soit utiliser Process.Start pour appeler schtasks.exe . L’API vous donnera une expérience plus transparente et robuste, mais j’ai choisi la route des schtasks parce que j’avais la ligne de commande à scope de main.

Voici le code que j’ai finalement fini avec. Je l’ai enregistré en tant qu’action personnalisée pour l’installation, la validation et la désinstallation.

 using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Linq; using System.Security.Permissions; using System.Diagnostics; using System.IO; namespace MyApp { [RunInstaller(true)] public partial class ScheduleTask : System.Configuration.Install.Installer { public ScheduleTask() { InitializeComponent(); } [SecurityPermission(SecurityAction.Demand)] public override void Commit(IDictionary savedState) { base.Commit(savedState); RemoveScheduledTask(); ssortingng installationPath = Context.Parameters["DIR"] ?? ""; //Without the replace, results in c:\path\\MyApp.exe ssortingng executablePath = Path.Combine(installationPath, "MyApp.exe").Replace("\\\\", "\\"); Process scheduler = Process.Start("schtasks.exe",ssortingng.Format("/Create /RU SYSTEM /SC HOURLY /MO 2 /TN \"MyApp\" /TR \"\\\"{0}\\\"\" /st 00:00", executablePath)); scheduler.WaitForExit(); } [SecurityPermission(SecurityAction.Demand)] public override void Uninstall(IDictionary savedState) { base.Uninstall(savedState); RemoveScheduledTask(); } private void RemoveScheduledTask() { Process scheduler = Process.Start("schtasks.exe", "/Delete /TN \"MyApp\" /F"); scheduler.WaitForExit(); } } }