Le paramètre masqué du planificateur de tâches de Windows 7 ne fonctionne pas

37

J'ai un processus démon que je lance sur ma machine toutes les heures et même si j'ai coché la Hiddencase, cela ne fonctionne pas.Propriétés de la tâche

Toutes les heures, la tâche est exécutée, mais la fenêtre de commande noire dans laquelle mon application de console .NET s'exécute est affichée. Cela reste visible jusqu'à la fin de la tâche, puis disparaît. C'est très énervant, car il apparaît et interrompt ce que je fais:

entrez la description de l'image ici

Je le veux vraiment caché, alors comment puis-je résoudre ce problème?

Joshua Frank
la source
duplication possible de la fenêtre
Décembre
2
La question liée ne mentionne pas le paramètre caché .
bwDraco
@DragonLord Vous avez raison, mais il est difficile de dire si cette question est "Pourquoi ne fonctionne pas Caché?" Ou s'il s'agit en fait de "Comment puis-je empêcher cette boîte de s'afficher?".
cʜιᴇ007
@ techie007: La question est de savoir comment rendre la fenêtre masquée, ce que je pensais que la case à cocher masquée fait. Mais cet article lié traite des scripts et du planificateur de tâches en ligne de commande et des scripts shell, et non de l'interface graphique du planificateur de tâches présentée dans mon message. Savez-vous comment utiliser l'interface graphique pour y parvenir?
Joshua Frank
Dans la plupart des cas, vous ne pouvez pas le faire uniquement à partir de l'interface graphique du planificateur de tâches. Généralement, vous devez modifier le contenu de l'action de la tâche (par exemple, un fichier de commandes ou un script) pour masquer la sous-fenêtre qui s'affiche. C'est ce que recouvre l'autre question et c'est pourquoi je l'ai désignée comme une dupe possible. :)
cʜιᴇ007

Réponses:

45

Cochez la case "Exécuter si l'utilisateur est connecté ou non" et le fichier exécutable s'exécutera en arrière-plan.

Fougère
la source
4
Aussi simple que cela. Cette réponse devrait être celle acceptée.
Rolve
Merci. J'ai eu le problème opposé. Je voulais afficher la console, mais ce ne l'était pas!
Randy Stegbauer
12
Cela nécessite de sauvegarder le mot de passe avec la tâche et annulera de manière cachée les prochaines modifications du mot de passe (ce qui est généralement appliqué par les stratégies de domaine dans les environnements d'entreprise).
Philipp Munin
@PhilippMunin Dans certains cas d'utilisation, cochez la case "Ne pas stocker le mot de passe". La tâche aura uniquement accès aux ressources informatiques locales. ', Ce qui éviterait de fournir le mot de passe.
Jimadine
20

Pourquoi la tâche planifiée de Windows 7 en cours d'exécution est-elle masquée? devrait expliquer pourquoi cela se produit.

En outre, cette description TechNet des propriétés de la tâche générale indique:

Les propriétés générales d'une tâche sont affichées dans l'onglet Général de la boîte de dialogue Propriétés de la tâche ou Créer une tâche. Les propriétés générales d'une tâche incluent le nom de la tâche, l'auteur, la description, les options de sécurité, le système d'exploitation pour lequel la tâche est configurée et une propriété qui contrôle si la tâche est masquée ou non .

Lorsque vous créez une tâche dans un dossier de tâches, vous devez nommer la tâche. Deux tâches ne peuvent pas avoir le même nom si elles se trouvent dans le même dossier de tâches. La description de la tâche est facultative.

Les options de sécurité de la tâche spécifient le contexte de sécurité dans lequel la tâche est exécutée. Pour plus d'informations, voir Contexte de sécurité de la tâche.

Par défaut, les tâches masquées ne sont pas affichées dans l'interface utilisateur du planificateur de tâches. Vous pouvez afficher les tâches masquées lorsque l'option Afficher les tâches masquées est sélectionnée dans le menu Affichage. Vous faites une tâche masquée lorsque vous cliquez sur la case à cocher Masqué sous l'onglet Général de la boîte de dialogue Propriétés de la tâche ou Créer une tâche.

Cela n'implique-t-il pas que la case à cocher ne masque que la tâche elle-même à l'interface utilisateur du planificateur, et non au programme réel planifié?

Karan
la source
Cela donne l'impression que c'est comme ça, mais ça ne le fait pas non plus; Je peux voir les tâches dans le planificateur. Ce serait une interface utilisateur étrange qui a travaillé avec des objets que vous ne pouviez pas voir.
Joshua Frank le
2
Avez-vous coché Afficher les tâches cachées dans le menu Afficher?
Karan
1
Ah, je l'ai fait, alors ça l'explique. Merci. Bien sûr, comme "Caché" ne fait pas ce que je pensais, je n’ai pas besoin de tâches cachées. Puisqu'il s'agit d'un outil réservé à l'administrateur et que les administrateurs n'aiment généralement pas les choses qui leur sont cachées, à quoi sert une tâche cachée?
Joshua Frank le
2
Qui sait, je n'ai certainement jamais utilisé cette option. Votre question était la première fois que je l'ai regardé pour voir ce qu'il a fait. :) BTW, au lieu de changer l'utilisateur en SYSTÈME, la sélection de "Exécuter si l'utilisateur est connecté ou non" résout le problème?
Karan
18

D'accord, après quelques recherches supplémentaires, j'ai trouvé cette réponse sur StackOverflow:

Pour configurer une tâche planifiée afin qu'elle s'exécute en arrière-plan, changez l'utilisateur qui exécute la tâche sur SYSTEM et rien ne s'affichera sur votre écran.

Un commentaire indique que cela confère tous les droits à la tâche, ce qui peut être gênant, mais acceptable dans ce cas.

Mais encore, que fait Hidden-il, s'il ne fait pas cela? Et pourquoi le compte utilisateur exécutant le programme aurait-il quelque chose à voir avec le fait qu'il soit visible?

Joshua Frank
la source
Lisez ma réponse ci-dessus, pourrait expliquer ce qu'il fait.
Karan
2
Cette réponse du SU aborde l'idée de l'exécuter en tant qu'utilisateur différent pour éviter de voir le résultat également. Je ne pense pas qu'il y ait de raison particulière de l'exécuter en tant que "Système", vous pouvez créer un utilisateur juste pour exécuter cette tâche, avec les autorisations que vous choisissez de lui accorder.
cʜιᴇ007
Mais pourquoi l’utilisateur configuré affecterait-il la visibilité de la fenêtre?
Joshua Frank
1
N'oubliez pas que le SYSTEMcompte n'a pas accès aux fichiers cryptés EFS d'autres utilisateurs.
Zero3
11

LA SOLUTION ULTIME

  • Changer l'utilisateur exécutant la tâche sur SYSTEM - exécutera votre commande non sous votre utilisateur
  • Cocher la case "Exécuter si l'utilisateur est connecté ou non" - nécessite de sauvegarder le mot de passe avec la tâche et annulera de manière cachée les prochaines modifications du mot de passe (ce qui est généralement appliqué par les stratégies de domaine dans les environnements d'entreprise).

Si ce sont des pactes pour vous, la solution ultime consiste à créer un fichier de script JS semblable à celui ci-dessous, qui exécutera votre commande dans une fenêtre masquée, attendra que votre commande se termine et renvoie son code d'erreur:

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

Enregistrez ce fichier comme js (myjob.js) et ajoutez ceci à votre planificateur de tâches: entrez la description de l'image ici Profitez

Philipp Munin
la source
En outre, vous devez utiliser Wscript.exe pour exécuter votre script, pas Cscript. Sinon, la fenêtre de la console noire pourrait apparaître pendant un moment.
BBK
Voici un autre exemple de VBScript qui fonctionne pour moi: faqforge.com/windows/…
BBK
2

"Exécuter si l'utilisateur est connecté ou non" permettra à l'option masquée de fonctionner. Notez que vous devez fournir vos informations d'identification après avoir choisi cette option.

Tran Viet Cuong
la source
1

Tous les deux :

  • Modification de l'utilisateur exécutant la tâche sur SYSTEM "
  • et cocher la case "Exécuter si l'utilisateur est connecté ou non"

empêchera la fenêtre de commande noire, mais soyez conscient des inconvénients: vous ne pourrez pas travailler avec certains outils d'automatisation d'interface graphique tels que 'AutoIt' ou SendKeys dans PowerShell, car Windows lance les tâches dans un environnement sans style.

Gabriel Glenn
la source
1

Je laisse les paramètres par défaut et écris de courts programmes personnalisés qui génèrent l'exécution sans afficher de fenêtre. Par exemple, pour exécuter un fichier de commandes sans ouvrir une fenêtre d'invite de commande, utilisez le code ci-dessous. Définissez la tâche pour générer "RunBatchFile.exe (path_to_batch_file)".

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}
AresAvatar
la source
1
Et je suppose que la magie qui fait est caché spécifiquement est due à la ProcessWindowStyle.Hiddenpartie spécifiquement, correct? Je vois quelque chose à ce sujet ici: msdn.microsoft.com/en-us/library/…
Pimp Juice IT
Oui, c'est ce qui cache la fenêtre. Sans cela, la fenêtre apparaîtra.
AresAvatar
1
Ce code, tel que rédigé, fonctionnera sur tout ce qui fonctionne avec ShellExecute.
AresAvatar
0

J'avais ce problème avec les tâches planifiées Powershell (que je déployais via GPO). J'ai fini par l'envelopper dans une fenêtre de commande:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
Berwin22
la source
Bien que cela puisse répondre à la question, ce serait une meilleure réponse si vous pouviez expliquer pourquoi .
DavidPostill