Es könnte hilfreich sein, das Problem aus einer anderen Perspektive zu verstehen. Nehmen wir an, Sie sind der Programmierer, der damit beauftragt wurde, Windows einen Taskplaner hinzuzufügen. Wie würdest du es machen? Sie haben verschiedene Probleme: Wenn die Aufgabe nicht als angemeldeter Benutzer ausgeführt wird, sollten Sie den angemeldeten Benutzer mit Fehler-Popups belästigen? Was ist, wenn zum Zeitpunkt der Taskausführung kein Benutzer angemeldet ist? Was ist mit dem Unterschied zwischen einem GUI-Programm und einem Konsolenprogramm? GUIs haben kein stdin, kein stdout und kein stderr; Das Konzept ist in ihnen bedeutungslos. Was ist mit internen oder externen Programmen für COMMAND.COM/CMD.EXE? Oder andere Scripting Engines? Was ist mit Pfaden mit Leerzeichen im Befehlsnamen? Oder in den Parametern (Optionen / Argumente)? (Wie Sie versuchen, jetzt zu beschäftigen ..)
Obwohl ich in diesem Fall nicht 100% sicher bin, ob es sich um interne oder technische Details handelt, scheinen die Antworten zu lauten. Aufgaben werden in einer isolierten, nicht interaktiven Sitzung ausgeführt, die nicht mit dem derzeit angemeldeten Benutzer (falls vorhanden) interagieren kann ); Es läuft in der Erwartung, dass es keine Konsolenausgabe gibt, da es nicht interaktiv ist. Es kann jeden angemeldeten Benutzer sowieso nicht unterbrechen, um die Ausgabe anzuzeigen die Systemprotokollierungsanlage); Leerzeichen werden behandelt, indem das Problem umgangen wird: Der Befehlsname wird EXAKT so wie er ist verwendet, und Parameter, die an den Befehl übergeben werden, werden in einem anderen Eingabefeld in den Task-Eigenschaften angegeben.
Das heißt, Ihre Aufgabe muss wie ein Dämon ausgeführt werden (in der Un * x-Welt). Alles ist statisch und präzise. Der Befehlsname ist der tatsächliche Befehlsname ohne Parameter. Dies beinhaltet häufig das Ausführen von Befehls / Skript-Interpretern, wie z. B. CMD.EXE! Die Parameter, falls vorhanden, werden an anderer Stelle angegeben und müssen beim Einrichten der Task bekannt sein (dh, Sie können die Parameter nicht "on-the-fly" ändern). Und so weiter.
Wenn Sie also Parameter einbeziehen möchten, müssen Sie den Parameterabschnitt verwenden, um die Parameter anzugeben. Der Taskplaner funktioniert nichtVersuchen Sie, den Befehlsnamen zu analysieren, um ihn in "command" und "args" zu unterteilen, wie dies Befehlszeilenprogramme tun. Es wird nur als ein großer, vollständiger Befehlsname behandelt. Wenn Sie variable Parameter möchten, z. B.% 1 ..% n in BATCH-Dateien, können Sie dies nicht über den Taskplaner selbst tun. Du musst einen anderen Weg finden. (Beachten Sie, dass Sie auch keine Umgebungsvariablen verwenden können, da die an das Programm übergebene Umgebung von der Umgebung abhängt, mit der der Task gestartet wird, NICHT von der "aktuellen" Umgebung.) Sie könnten eine temporäre Datei verwenden, um die Parameter zu speichern In den Task-Eigenschaften muss ein statischer Dateiname angegeben werden. Was passiert, wenn Sie sich in einem Netzwerk mit 5000 Benutzern befinden und vier von ihnen versuchen, denselben Task gleichzeitig auszuführen? Sie alle quälen sich gegenseitig und versuchen gleichzeitig, in dieselbe temporäre Datei zu schreiben. wahrscheinlich auch nicht das, was du wolltest. (Es gibt auch Lösungen für dieses Problem, aber das geht zu weit über den Rahmen dieser Frage und Antwort hinaus.)
Endgültige Antwort: Im einfachen Fall - der Pfad, den Sie als Parameter übergeben möchten, ist statisch und ändert sich nicht - müssen Sie die Parameter entweder in der entsprechenden Task-Eigenschaft (Argumente) und nicht im Feld Programm / Skript angeben oder verwenden Sie eine Batch-Datei. In einem komplexeren Fall müssen Sie die richtige Frage stellen oder untersuchen, wie Dämonen funktionieren und wie Sperren / Semaphoren und dergleichen für die prozessübergreifende Kommunikation (IPC) verwendet werden.
Viel Glück.