J'ai un script batch qui prépare certains fichiers, exécute un programme (.exe
), puis supprime lesdits fichiers.
Cette tâche doit s'exécuter toutes les heures, j'essaie donc de la configurer à l'aide de tâches planifiées. Le problème est que le programme mentionné précédemment ne s'exécute pas correctement lorsqu'il est appelé à partir de la tâche (ni via le .bat
script, ni lors de l'appel du .exe
directement), mais je ne reçois aucun avertissement ni message d'erreur dans les journaux.
La tâche est configurée pour s'exécuter en tant que compte de service Windows disposant de tous les privilèges correctement définis. Lorsque j'utilise ce compte pour me connecter via RDP, je peux exécuter le .bat
et .exe
directement sans problème, mais la tâche semble toujours ne rien faire. Ceci est facilement observé car le programme toujours modifie un fichier, et modifié sur l'horodatage ne change pas à travers la tâche.
Dans les journaux des tâches planifiées, j'obtiens les messages d'information pour la tâche qui démarre un processus, se termine, etc. Le "code de résultat", cependant, est 111
(j'ai essayé de Google sans succès, la seule association que j'obtiens est "le nom de fichier est trop long", ce qui n'est tout simplement pas pertinent AFAIK). Dans les journaux d'application, je ne reçois absolument rien.
Le programme est une ancienne monstruosité qui génère une sorte d'écran de démarrage (c'est en fait une fenêtre normale), même si l'interface graphique n'est pas nécessaire car elle ne nécessite aucune interaction et se ferme après les opérations. La fenêtre apparaît pendant environ 2 secondes.
Je soupçonne que cette exigence d'interface graphique a quelque chose à voir avec l'échec de la tâche, mais je ne suis pas sûr. Lorsque je me connecte avec l'utilisateur sous lequel la tâche s'exécute (via RDP), aucune fenêtre n'apparaît lorsque je démarre la tâche planifiée.
J'ai construit un très petit exécutable C # qui lance le programme sans la fenêtre principale (en utilisant ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
). Même de cette façon, la tâche planifiée ne réussit toujours pas à lancer le programme correctement, mais le code retour est maintenant 0
.
Lorsque je configure la tâche pour dire "exécuter, que l'utilisateur soit connecté ou non", et le run with highest privileges
l'option est non cochée, la valeur d'erreur est 2147943859
.
Que puis-je faire pour dépanner?
OS = Windows Server 2008 R2 SP1
Si plus d'informations sont nécessaires, veuillez me le faire savoir dans les commentaires.
Les gars de l'entreprise qui gère les serveurs de nos clients ont déclaré qu'un programme GUI ne s'exécuterait pas via des tâches planifiées de quelque manière que ce soit.
Ils utilisent un système de surveillance qui dispose également de fonctionnalités de planification des tâches. Ils l'ont mis en place grâce à cela et cela semble fonctionner.
Désolé de ne pas avoir eu la chance d'évaluer plus de suggestions ici, mais merci d'avoir essayé de toute façon. J'espère que cela pourra aider d'autres à l'avenir, ce que je pense certainement.
Je crois que votre problème est lié soit aux autorisations du compte utilisé pour exécuter la tâche, soit au contexte du compte tel qu'il existe lorsque vous essayez d'exécuter la tâche.
Il est possible que votre . EXE doit être exécuté dans la session Console
(alias Session 0) sur l'ordinateur. Pour tester cela:
QWINSTA
, observez la colonne SESSIONNAME
et confirmez >
l'indicateur est à côté de console
, en d'autres termes, il doit apparaître comme >console
)Si la tâche s'exécute correctement, essayez de planifier la tâche avec SCHTASKS.EXE
en utilisant le /IT
paramètre. A défaut, vous pouvez n'avoir d'autre choix que de configurer l'ordinateur pour qu'il se connecte automatiquement en tant que compte d'utilisateur de service et exécute la tâche en tant que programme de démarrage.
De plus, comme je l'ai déjà suggéré, vérifiez les points suivants pour confirmer que le compte utilisé pour exécuter la tâche est correctement autorisé:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
)Effective Permissions
onglet dans les propriétés du fichier/dossier à Security > Advanced
Ajoutez une journalisation à votre fichier de commandes. Après chaque ligne qu'il exécute, faites-lui écrire une sortie dans un fichier journal afin que vous sachiez où il se bloque. Par exemple:
@echo off
echo Line 1 >> "C:\MyLog.txt"
"C:\My Folder\myOldProgram.exe"
echo Line 2 >> "C:\MyLog.txt"
DEL somefile.dat
echo Line 3 >> "C:\MyLog.txt"
Essayez d'exécuter votre . EXE avec START
, par exemple START "myTitle" "C:\full\path\to\my.EXE"
Je réponds à un ancien message au cas où cela aiderait quelqu'un d'autre. J'ai eu le même problème. Le journal des événements indique que le programme s'est terminé normalement, mais même la première ligne de code n'écrirait pas pour moi dans le journal. Il a fini par être l'option "Démarrer dans" dans le Planificateur de tâches. Il m'est venu à l'esprit que le programme fonctionnait bien à partir de la ligne de commande lorsque j'étais dans le répertoire actuel. Il existe des fichiers manifestes et d'autres dépendances dans le même répertoire. Par conséquent, si vous indiquez au travail planifié de démarrer dans le même répertoire que l'EXE, vous pouvez obtenir des résultats favorables. C'était la solution pour moi.
peut-être que cela vous aide?
Nous avons eu un problème similaire et votre seule solution était de créer un compte spécial sur le serveur avec la connexion automatique. Donc, si la tâche s'est déroulée sous l'utilisateur déjà connecté, notre .exe a bien fonctionné ...
je sais que ce n'est pas une très bonne solution mais pour nous, c'est la seule chose qui a fonctionné. je ne sais pas si cela fonctionne pour vous ... (Mais avec ce travail, vous devez vérifier si l'utilisateur est vraiment connecté tout le temps ...)
J'essayais de démarrer et l'ancien programme VB6 en utilisant le planificateur de tâches sur un serveur Windows 2008 R2. L'application s'exécuterait à partir de l'exe, via un fichier de commandes ou en cliquant sur un raccourci, mais ne s'exécuterait pas à partir du planificateur de tâches. J'ai constaté que lorsque les fichiers de configuration de l'application, qui étaient stockés dans le dossier applications du répertoire C:\program files (x86), étaient copiés dans le dossier d'application sur c:\programdata. l'ordonnanceur a fonctionné. il semble que cmd.exe applique la configuration à partir d'un emplacement différent de celui utilisé par le planificateur de tâches. Si votre application possède des fichiers de configuration, vous pouvez essayer de les déplacer vers le dossier c:\programdata\application.
Peut-être que la réponse à cette question aidera quelqu'un d'autre à lire ce fil?
https://stackoverflow.com/questions/32589381/
Résumé: Les tâches planifiées de Windows 2012 font pas voir les variables d'environnement correctes, y compris PATH
, pour le compte sous lequel la tâche doit être exécutée.
J'ai lu tout cela assez longtemps avant de travailler sur ce qui précède. (Ce qui était mon propre problème menant à la même chose que la question du PO.)
Une fois que vous (enfin!) Le savez, il est assez facile de le tester (selon la réponse stackoverflow), de le voir se produire et de le contourner ....
Faites-vous référence à des lecteurs réseau mappés dans votre script ou programme? J'ai eu un problème similaire il y a quelque temps, où ma tâche planifiée ne s'exécuterait pas, et je ne pouvais pas comprendre pourquoi. Le changement de chemin (s) en chemins UNC l'a résolu pour moi.
Changement T:\Apps\MyProgram.exe
à \\MyServer\MyShare\Apps\MyProgram.exe
Lorsque je configure la tâche pour dire "exécuter, que l'utilisateur soit connecté ou non" et que l'option d'exécution avec les privilèges les plus élevés ne soit pas cochée, la valeur d'erreur est 2147943859.
2147943859 converti en hexadécimal est 800705b3 qui, selon un bref voyage vers Google, signifie "Impossible de démarrer le programme d'installation sur l'ordinateur. Cette opération nécessite une station Windows interactive".
Maintenant, il peut y avoir un moyen de le faire fonctionner de manière interactive sans utiliser PSEXEC (de Sysinternals) mais comme je sais déjà comment le faire via PSEXEC, c'est ce que j'utiliserais.
PSExec: http://technet.Microsoft.com/en-us/sysinternals/bb897553.aspx
Par conséquent, modifiez votre action pour tout ajouter au début avec psexec.exe -i (et -h si vous en avez besoin élevé) et cela devrait fonctionner.
J'ai essayé cela sur Windows Server 2008 R2 SP1 avec ce qui suit dans mon "action":
c:\windows\system32\cmd.exe
puis les paramètres:
/c psexec.exe -h -i notepad.exe
Lorsque j'exécute manuellement la tâche (car je ne l'ai pas planifiée), j'obtiens un bloc-notes élevé en cours d'exécution dans ma session actuelle.