Situation
Ich habe ein Batch-Skript, das einige Dateien vorbereitet, ein Programm ( .exe
) ausführt und diese Dateien dann löscht.
Diese Aufgabe sollte stündlich ausgeführt werden, daher versuche ich, dies mithilfe von geplanten Aufgaben zu konfigurieren. Das Problem ist, dass das zuvor erwähnte Programm .bat
beim Aufrufen von der Task aus (weder über das Skript noch beim .exe
direkten Aufrufen der ) nicht ordnungsgemäß ausgeführt wird , aber in den Protokollen keine Warn- oder Fehlermeldungen angezeigt werden.
Installieren
Der Task ist so konfiguriert, dass er als Windows-Dienstkonto ausgeführt wird, für das alle Berechtigungen ordnungsgemäß festgelegt wurden. Wenn ich mich mit diesem Konto über RDP anmelde, kann ich das .bat
und .exe
direkt ohne Probleme ausführen , aber die Aufgabe scheint immer noch nichts zu tun. Dies ist leicht zu beobachten, da das Programm eine Datei immer ändert und sich der geänderte Zeitstempel während der Task nicht ändert.
In den geplanten Aufgabenprotokollen erhalte ich die Informationsmeldungen für die Aufgabe, die einen Prozess startet, beendet usw. Der "Ergebniscode" ist jedoch 111
(versucht dies ohne Glück zu googeln, die einzige Zuordnung, die ich erhalte, ist "Dateiname ist zu lang ", was für AFAIK einfach völlig irrelevant ist). In den Anwendungsprotokollen bekomme ich absolut nichts.
Was ich vermute, ist das Problem
Das Programm ist eine alte Monstrosität, die eine Art Begrüßungsbildschirm erzeugt (es ist eigentlich ein normales Fenster), obwohl die GUI nicht benötigt wird, weil sie keine Interaktion erfordert und sich nach Operationen selbst schließt. Das Fenster wird ca. 2 Sekunden lang angezeigt.
Ich vermute, dass diese Anforderung für eine GUI etwas mit dem Fehlschlagen der Aufgabe zu tun hat, bin mir aber nicht sicher. Wenn ich mich mit dem Benutzer anmelde, unter dem die Aufgabe ausgeführt wird (über RDP), wird beim Starten der geplanten Aufgabe kein Fenster angezeigt.
Bearbeiten Sie über die GUI
Ich habe eine sehr kleine ausführbare C # -Datei erstellt, die das Programm ohne das Hauptfenster startet (mit ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
). Auch auf diese Weise kann der geplante Task das Programm nicht ordnungsgemäß starten, der Rückkehrcode lautet jedoch jetzt 0
.
Aktualisieren
Wenn ich die Task so konfiguriere, dass sie "Ausführen, ob der Benutzer angemeldet ist oder nicht" sagt und die run with highest privileges
Option deaktiviert ist , lautet der Fehlerwert 2147943859
.
Was kann ich tun, um Fehler zu beheben?
Betriebssystem = Windows Server 2008 R2 SP1
Wenn weitere Informationen benötigt werden, lassen Sie es mich in den Kommentaren wissen.
.exe
"Programm" mit Parametern aus einem Skript heraus gestartet wird, muss die Eingabe ordnungsgemäß als Argument bereitgestellt werden.Antworten:
Ich glaube, Ihr Problem hat entweder mit den Berechtigungen des Kontos zu tun, mit dem die Aufgabe ausgeführt wird, oder mit dem Kontext des Kontos, der beim Ausführen der Aufgabe vorhanden ist.
Test für Konsolensitzungsanforderung
Möglicherweise muss Ihre .EXE-Datei in einer
Console
Sitzung (aka Sitzung 0) auf dem Computer ausgeführt werden. Um dies zu testen:QWINSTA
, beobachten Sie dieSESSIONNAME
Spalte und bestätigen Sie, dass der>
Indikator neben stehtconsole
, mit anderen Worten, es sollte so aussehen>console
)Wenn die Aufgabe korrekt ausgeführt wird, versuchen Sie, die Aufgabe
SCHTASKS.EXE
mithilfe des/IT
Parameters zu planen . Andernfalls müssen Sie den Computer möglicherweise so konfigurieren, dass er sich automatisch als Dienstbenutzerkonto anmeldet und die Aufgabe als Startprogramm ausführt.Überprüfen Sie die Berechtigungen
Überprüfen Sie außerdem, wie bereits vorgeschlagen, Folgendes, um sicherzustellen, dass das zum Ausführen der Aufgabe verwendete Konto über die erforderlichen Berechtigungen verfügt:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
).Effective Permissions
Registerkarte in den Eigenschaften der Datei / des Ordners unter verwendenSecurity > Advanced
Zusätzliche Dinge zu überprüfen / versuchen
Fügen Sie Ihrer Batch-Datei einige Protokolldateien hinzu. Lassen Sie das Programm nach jeder ausgeführten Zeile eine Ausgabe in eine Protokolldatei schreiben, damit Sie wissen, wo es hängen bleibt. Beispielsweise:
Versuchen Sie , Ihren Lauf .EXE mit
START
, zum BeispielSTART "myTitle" "C:\full\path\to\my.EXE"
quelle
Ich antworte auf einen alten Beitrag, falls er jemand anderem hilft. Ich hatte das gleiche Problem. Das Ereignisprotokoll besagte, dass das Programm normal beendet wurde, aber nicht einmal die erste Codezeile würde für mich in das Protokoll schreiben. Es wurde die Option "Start In" im Taskplaner. Mir ist aufgefallen, dass das Programm über die Befehlszeile einwandfrei ausgeführt wird, wenn ich mich im aktuellen Verzeichnis befinde. Es gibt Manifestdateien und andere Abhängigkeiten in demselben Verzeichnis. Wenn Sie also den geplanten Job anweisen, im selben Verzeichnis wie die EXE zu starten, erhalten Sie möglicherweise günstige Ergebnisse. Es war die Lösung für mich.
quelle
Vielleicht hilft dir das?
/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-and-auser-to-be
Wir hatten ein ähnliches Problem und Ihre einzige Lösung war, dass wir mit Autologin ein spezielles Konto auf dem Server eingerichtet haben. Wenn die Aufgabe also unter dem bereits angemeldeten Benutzer lief, hat unsere .exe gut funktioniert ...
Ich weiß, das ist keine sehr schöne Lösung, aber für uns war es das einzige, was funktioniert hat. Ich weiß nicht, ob das für dich funktioniert ... (Aber bei dieser Arbeit musst du überprüfen, ob der Benutzer wirklich die ganze Zeit eingeloggt ist ...)
quelle
Windows Vista/Windows Server 2008
oder einstellenWindows 7/Windows Server 2008 R2
. Es scheint keinen Unterschied zu machen.Die Mitarbeiter des Unternehmens, das die Server unserer Kunden betreibt, gaben an, dass ein GUI-Programm in keiner Weise über geplante Tasks ausgeführt werden würde.
Sie verwenden ein Überwachungssystem mit Aufgabenplanungsfunktionen. Sie haben es dadurch eingerichtet und es scheint zu funktionieren.
Es tut mir leid, dass ich hier keine Gelegenheit hatte, weitere Vorschläge zu bewerten, aber danke, dass Sie trotzdem versucht haben, mir zu helfen. Ich hoffe, dass es in Zukunft anderen helfen kann, was ich sicher denke.
quelle
Ich habe versucht, ein altes VB6-Programm mit dem Taskplaner auf einem Windows 2008 R2-Server zu starten. Die Anwendung würde von der EXE-Datei aus über eine Batch-Datei oder durch Klicken auf eine Verknüpfung ausgeführt, jedoch nicht über den Taskplaner. Ich habe festgestellt, dass die Konfigurationsdateien für die Anwendung, die im Anwendungsordner im Verzeichnis C: \ program files (x86) gespeichert waren, in den Anwendungsordner unter c: \ programdata kopiert wurden. Der Scheduler funktionierte. Anscheinend wendet cmd.exe die Konfiguration von einem anderen Speicherort als vom Taskplaner verwendet an. Wenn Ihre Anwendung Konfigurationsdateien enthält, können Sie versuchen, diese in den Ordner c: \ programdata \ application zu verschieben.
quelle
Verweisen Sie auf zugeordnete Netzlaufwerke in Ihrem Skript oder Programm? Ich hatte vor einiger Zeit ein ähnliches Problem, bei dem meine geplante Aufgabe nicht ausgeführt werden konnte, und ich konnte nicht herausfinden, warum. Das Ändern der Pfade in UNC-Pfade hat es für mich gelöst.
Wechseln Sie
T:\Apps\MyProgram.exe
zu\\MyServer\MyShare\Apps\MyProgram.exe
quelle
C:
Laufwerk.2147943859 in Hex konvertiert ist 800705b3. Eine kurze Reise zu Google besagt, dass das Installationsprogramm auf dem Computer nicht gestartet werden konnte. Für diesen Vorgang ist eine interaktive Fensterstation erforderlich.
Es gibt vielleicht eine Möglichkeit, es interaktiv laufen zu lassen, ohne PSEXEC (von Sysinternals) zu verwenden, aber da ich bereits weiß, wie man es über PSEXEC macht, würde ich es verwenden.
PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
Ändern Sie daher Ihre Aktion, um alles mit psexec.exe -i (und -h, wenn Sie es mit erhöhten Rechten benötigen) voranzustellen, und es sollte funktionieren.
Ich habe dies unter Windows Server 2008 R2 SP1 mit den folgenden Aktionen versucht:
und dann die Parameter:
Wenn ich die Aufgabe manuell ausführe (da ich keinen Zeitplan habe), wird in meiner aktuellen Sitzung ein Notizblock mit erhöhten Rechten ausgeführt.
quelle
Vielleicht hilft die Antwort auf diese Frage jemandem, der diesen Thread liest?
/programming/32589381/
Zusammenfassung: Geplante Windows 2012-Aufgaben sehen nicht die richtigen Umgebungsvariablen, auch nicht
PATH
für das Konto, unter dem die Aufgabe ausgeführt werden soll.Ich habe das alles ziemlich lange durchgelesen, bevor ich das oben Genannte herausgefunden habe. (Was mein eigenes Problem war, das zur selben Frage wie die OP führte.)
Sobald Sie dies (endlich!) Wissen, ist es ziemlich einfach, es zu testen (gemäß der Stackoverflow-Antwort), zu beobachten, wie es passiert, und es zu umgehen.
quelle