Die ausgeblendete Einstellung von Windows 7 Task Scheduler funktioniert nicht

37

Ich habe einen Daemon-Prozess, den ich stündlich auf meinem Computer ausführe, und obwohl ich das Kontrollkästchen Hiddenaktiviert habe, funktioniert er nicht.Task-Eigenschaften

Die Task wird stündlich ausgeführt, zeigt jedoch das schwarze Befehlsfenster an, in dem meine .NET Console-App ausgeführt wird. Dies bleibt sichtbar, bis die Aufgabe abgeschlossen ist, und verschwindet dann. Das ist sehr ärgerlich, weil es auftaucht und alles unterbricht, was ich tue:

Bildbeschreibung hier eingeben

Ich möchte es wirklich versteckt haben. Wie kann ich das beheben?

Joshua Frank
quelle
Möglicherweise wird ein Duplikat des Fensters Stop taskeng.exe angezeigt
ƬᴇcƬᴇιʜ007
2
In der verknüpften Frage wird die Einstellung " Versteckt" nicht erwähnt .
bwDraco
@DragonLord Sie haben Recht, aber es ist schwer zu sagen, ob diese Frage "Warum funktioniert Hidden nicht?"
ᴇcƬᴇιᴇ007
@ techie007: Die Frage ist, wie das Fenster ausgeblendet werden kann, was meiner Meinung nach das verborgene Kontrollkästchen bewirkt. Dieser verlinkte Artikel befasst sich jedoch mit Skripten und dem Befehlszeilen-Taskplaner und Shell-Skripten, nicht mit der in meinem Beitrag gezeigten Taskplaner-GUI. Wissen Sie, wie Sie die GUI verwenden, um dies zu erreichen?
Joshua Frank
In den meisten Fällen können Sie dies nicht einfach über die Taskplaner-Benutzeroberfläche tun. Normalerweise müssen Sie die Ausführung der Task-Aktion ändern (z. B. eine Batch-Datei oder ein Skript), um das sich öffnende Unterfenster auszublenden. Das ist, was die andere Frage abdeckt, und deshalb habe ich es als möglichen Betrüger gekennzeichnet. :)
ƬᴇcƬᴇιʜ007

Antworten:

45

Aktivieren Sie das Kontrollkästchen "Ausführen, ob Benutzer angemeldet ist oder nicht", und die ausführbare Datei wird im Hintergrund ausgeführt.

Farn
quelle
4
So einfach ist das. Diese Antwort sollte die akzeptierte sein.
rolve
Vielen Dank. Ich hatte das gegenteilige Problem. Ich wollte, dass die Konsole angezeigt wird, aber das war es nicht!
Randy Stegbauer
12
Dies erfordert das Speichern des Kennworts für die Aufgabe und führt zu einem versteckten Bruch der Kennwortänderungen beim nächsten Mal (was normalerweise durch Domänenrichtlinien in Unternehmensumgebungen erzwungen wird).
Philipp Munin
@PhilippMunin In bestimmten Anwendungsfällen können Sie möglicherweise das Kontrollkästchen 'Kennwort nicht speichern' deaktivieren. Die Aufgabe hat nur Zugriff auf lokale Computerressourcen. 'Dies würde die Eingabe des Kennworts überflüssig machen.
Jimadine
20

Warum wird die geplante Windows 7-Aufgabe ausgeblendet? sollte erklären, warum dies passiert.

In dieser TechNet-Beschreibung der allgemeinen Aufgabeneigenschaften heißt es außerdem:

Die allgemeinen Eigenschaften einer Aufgabe werden auf der Registerkarte Allgemein im Dialogfeld Aufgabeneigenschaften oder Aufgabe erstellen angezeigt. Zu den allgemeinen Eigenschaften einer Aufgabe gehören der Aufgabenname, der Autor, die Beschreibung, die Sicherheitsoptionen, das Betriebssystem, für das die Aufgabe konfiguriert ist, und eine Eigenschaft, die steuert, ob die Aufgabe ausgeblendet ist .

Wenn Sie eine Aufgabe in einem Aufgabenordner erstellen, müssen Sie die Aufgabe benennen. Keine zwei Aufgaben können denselben Namen haben, wenn sie sich in demselben Aufgabenordner befinden. Die Aufgabenbeschreibung ist optional.

Task-Sicherheitsoptionen geben den Sicherheitskontext an, unter dem die Task ausgeführt wird. Weitere Informationen finden Sie unter Task-Sicherheitskontext.

Standardmäßig werden ausgeblendete Aufgaben nicht in der Taskplaner-Benutzeroberfläche angezeigt. Sie können ausgeblendete Aufgaben anzeigen, wenn im Menü Ansicht die Option Verborgene Aufgaben anzeigen ausgewählt ist. Sie machen eine Aufgabe ausgeblendet, wenn Sie auf der Registerkarte Allgemein des Dialogfelds Aufgabeneigenschaften oder Aufgabe erstellen auf das Kontrollkästchen Ausgeblendet klicken.

Bedeutet dies nicht, dass das Kontrollkästchen nur die Aufgabe selbst vor der Benutzeroberfläche des Schedulers verbirgt und nicht das tatsächlich geplante Programm?

Karan
quelle
Es klingt zwar so, aber das tut es auch nicht. Ich kann die Aufgaben im Scheduler sehen. Es wäre eine seltsame Benutzeroberfläche, die mit Objekten funktioniert, die Sie nicht sehen konnten.
Joshua Frank
2
Haben Sie im Menü "Ansicht" die Option " Versteckte Aufgaben anzeigen" aktiviert?
Karan
1
Ah, das habe ich getan, das erklärt es. Vielen Dank. Natürlich brauche ich keine versteckten Aufgaben, da "Hidden" nicht das tut, was ich dachte. Welchen Zweck hat eine versteckte Aufgabe, da dies nur ein Admin-Tool ist und Administratoren es im Allgemeinen nicht mögen, Dinge vor ihnen zu verbergen?
Joshua Frank
2
Wer weiß, sicherlich habe ich diese Option nie benutzt. Ihre Frage war das erste Mal, dass ich nachgeschlagen habe, um zu sehen, was sie tat. :) BTW, anstatt den Benutzer in SYSTEM zu ändern, wird das Problem durch Auswahl von "Ausführen, ob Benutzer angemeldet ist oder nicht" behoben?
Karan
18

Okay, nach einigen weiteren Recherchen habe ich diese Antwort auf StackOverflow gefunden:

Wenn Sie eine geplante Aufgabe für die Ausführung im Hintergrund einrichten möchten, ändern Sie den Benutzer, der die Aufgabe ausführt, in SYSTEM. Auf dem Bildschirm wird nichts angezeigt.

Ein Kommentar weist darauf hin, dass dies der Aufgabe die vollen Rechte einräumt, was ärgerlich sein könnte, aber in diesem Fall akzeptabel ist.

Aber was Hiddentun, wenn dies nicht der Fall ist? Und warum hat das Benutzerkonto, mit dem das Programm ausgeführt wird, etwas damit zu tun, ob es sichtbar ist?

Joshua Frank
quelle
Lesen Sie meine Antwort oben, könnte erklären, was es tut.
Karan
2
Diese SU-Antwort greift die Idee auf, sie als anderer Benutzer auszuführen, um zu vermeiden, dass auch die Ausgabe angezeigt wird. Ich glaube nicht, dass es einen bestimmten Grund gibt, es als "System" auszuführen. Sie könnten einen Benutzer nur zum Ausführen dieser Aufgabe mit den Berechtigungen, die Sie ihnen gewähren, festlegen.
25cƬᴇιᴇ007
Aber warum würde der konfigurierte Benutzer die Sichtbarkeit des Fensters beeinflussen?
Joshua Frank
1
Beachten Sie, dass das SYSTEMKonto keinen Zugriff auf die EFS-verschlüsselten Dateien anderer Benutzer hat.
Zero3
11

DIE ULTIMATIVE LÖSUNG

  • Ändern Sie den Benutzer, auf dem die Task ausgeführt wird, in SYSTEM, um den Befehl auszuführen, der nicht unter Ihrem Benutzer ausgeführt wird
  • Das Aktivieren der Option "Ausführen, ob Benutzer angemeldet sind oder nicht" - erfordert das Speichern des Kennworts für die Aufgabe und bricht die Kennwortänderungen beim nächsten Mal versteckt ab (was normalerweise durch Domänenrichtlinien in Unternehmensumgebungen erzwungen wird).

Wenn dies für Sie ein Deal Breaker ist, besteht die ultimative Lösung darin, eine JS-Skriptdatei wie die folgende zu erstellen, die Ihren Befehl in einem versteckten Fenster ausführt, auf die Beendigung Ihres Befehls wartet und seinen Fehlercode zurückgibt:

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

Speichern Sie dies als js-Datei (myjob.js) und fügen Sie dies zu Ihrem Aufgabenplaner hinzu: Bildbeschreibung hier eingeben Viel Spaß

Philipp Munin
quelle
Sie sollten auch Wscript.exe verwenden, um Ihr Skript auszuführen, nicht Cscript. Andernfalls wird möglicherweise für einen Moment ein schwarzes Konsolenfenster angezeigt.
BBK
Hier ist ein weiteres Beispiel für VBScript, das für mich funktioniert: faqforge.com/windows/…
BBK
2

"Ausführen, ob Benutzer angemeldet ist oder nicht" lässt die verborgene Option zu. Beachten Sie, dass Sie Ihre Anmeldeinformationen angeben müssen, nachdem Sie dies ausgewählt haben.

Tran Viet Cuong
quelle
1

Beide :

  • Ändern des Benutzers, der die Task auf SYSTEM ausführt "
  • und Aktivieren der Option "Ausführen, ob der Benutzer angemeldet ist oder nicht"

verhindert das schwarze Befehlsfenster, ist sich jedoch der Nachteile bewusst: Sie können mit einigen GUI-Automatisierungstools wie "AutoIt" ​​oder "SendKeys" in PowerShell nicht arbeiten, da Windows die Aufgaben in einer Umgebung ohne Kopf ausführt.

Gabriel Glenn
quelle
1

Ich lasse die Standardeinstellungen und schreibe kurze benutzerdefinierte Programme, die die Ausführung starten, ohne dass ein Fenster angezeigt wird. Verwenden Sie beispielsweise den folgenden Code, um eine Batchdatei auszuführen, ohne ein Eingabeaufforderungsfenster aufzurufen. Stellen Sie die Aufgabe so ein, dass sie "RunBatchFile.exe (path_to_batch_file)" erzeugt.

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
quelle
1
Und ich nehme an, dass die Magie, die verborgen ist, auf die ProcessWindowStyle.Hiddenbestimmte Portion zurückzuführen ist, richtig? Ich sehe hier etwas darüber: msdn.microsoft.com/en-us/library/…
Pimp Juice IT
Ja, das ist es, was das Fenster verbirgt. Ohne diese Option wird das Fenster geöffnet.
AresAvatar
1
Dieser geschriebene Code funktioniert für alle mit ShellExecute ausgeführten Anwendungen.
AresAvatar
0

Ich hatte dieses Problem mit geplanten Powershell-Aufgaben (die ich über GPO bereitgestellt habe). Am Ende habe ich es in ein Befehlsfenster gewickelt:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
Berwin22
quelle
Während dies die Frage beantworten mag, wäre es eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill