Программа не работает должным образом как запланированная задача

ситуация

У меня есть пакетный скрипт, который готовит некоторые файлы, выполняет программу (.exe), а затем удаляет указанные файлы.

Эта задача должна выполняться ежечасно, поэтому я пытаюсь настроить ее с помощью запланированных задач. Проблема в том, что ранее упомянутая программа не работает должным образом при вызове из задачи (ни через .bat сценарий, ни при вызове .exe напрямую), но я не получаю никаких предупреждений или сообщений об ошибках в журналах.

Настроить

Задача настроена для запуска в качестве учетной записи службы Windows, для которой все права установлены правильно. При использовании этой учетной записи для входа через RDP, я могу выполнить .bat а также .exe напрямую, без проблем, но все равно задача, похоже, ничего не делает. Это легко заметить, потому что программа всегда изменяет файл, а измененная отметка времени не изменяется в ходе выполнения задачи.

В журналах запланированных задач я получаю информационные сообщения о запуске, выходе и т. Д. "Код результата", однако, 111 (пытался гуглить это без удачи, единственная ассоциация, которую я получаю, это "имя файла слишком длинное", что просто не имеет никакого отношения к AFAIK). В логах приложений я абсолютно ничего не получаю.

То, что я подозреваю, является проблемой

Программа - это старое чудовище, которое порождает своего рода заставку (это на самом деле обычное окно), даже если графический интерфейс не нужен, поскольку он не требует взаимодействия и закрывается после операций. Окно появляется примерно на 2 секунды.

Я подозреваю, что это требование для GUI как-то связано с ошибкой задачи, но я не уверен. Когда я вхожу с пользователем, под которым запускается задача (через RDP), при запуске запланированной задачи окно не появляется.


Редактировать о GUI

Я создал очень маленький исполняемый файл C#, который запускает программу без главного окна (используя ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden). Даже в этом случае назначенному заданию все равно не удается правильно запустить программу, но код возврата теперь 0,


Обновить

Когда я настраиваю задачу, чтобы сказать "запустить, вошел ли пользователь в систему или нет", и run with highest privileges опция не отмечена, значение ошибки 2147943859,


Что я могу сделать, чтобы устранить неполадки?

ОС = Windows Server 2008 R2 SP1

Если требуется дополнительная информация, пожалуйста, дайте мне знать в комментариях.

8 ответов

Решение

Ребята из компании, которая управляет серверами наших клиентов, сказали, что программа с графическим интерфейсом не будет запускаться через запланированные задачи каким-либо образом.

Они используют систему мониторинга, которая также имеет функции планирования задач. Они настроили это через это, и это, кажется, работает.

Извините, что у меня не было возможности оценить больше предложений здесь, но спасибо за попытку помочь в любом случае. Я надеюсь, что это может помочь другим в будущем, что, я думаю, наверняка поможет.

Я полагаю, что ваша проблема связана либо с разрешениями учетной записи, используемой для запуска задачи, либо с контекстом учетной записи, который существует при попытке запустить задачу.

Тест для требования сеанса консоли

Возможно, ваш .EXE должен быть запущен в Console сеанс (он же сеанс 0) на компьютере. Чтобы проверить это:

  1. Сконфигурируйте задачу на Запуск только тогда, когда пользователь вошел в систему, и укажите время начала задачи 2 минуты в будущем.
  2. Войдите в систему с той же учетной записью пользователя, которая использовалась для запуска задачи (предпочтительно войдите в сеанс консоли, либо физически находясь на консоли, либо с помощью программы удаленного доступа, которая предоставляет доступ к консоли. Чтобы подтвердить, что вы используете консольный сеанс из командной строки QWINSTAсоблюдать SESSIONNAME и подтвердите > индикатор рядом с consoleдругими словами это должно выглядеть как >console)
  3. Дождитесь запуска задания

Если задача выполняется правильно, попробуйте запланировать задачу с помощью SCHTASKS.EXEс использованием/ITпараметр. В противном случае у вас может не быть иного выбора, кроме как настроить компьютер для автоматического входа в систему в качестве учетной записи пользователя службы и запуска задачи в качестве запускаемой программы.

Проверьте разрешения

Кроме того, как я уже предложил, проверьте следующее, чтобы убедиться, что учетная запись, используемая для запуска задачи, имеет соответствующие разрешения:

  1. Предоставьте учетной записи правовхода в систему как пользователь пакетного задания (находится в локальной групповой политике по адресу Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments)
  2. Подтвердите, что задача настроена на Запуск с самыми высокими привилегиями.
  3. Убедитесь, что у пользователя есть полные разрешения NTFS для всех папок и файлов, с которыми он должен взаимодействовать. Не делайте предположений; вместо этого подтвердите, перейдя к таким местоположениям файлов и используя Effective Permissions вкладка в свойствах файла / папки в Security > Advanced

Дополнительные вещи, чтобы проверить / попробовать

  • Требует ли задача доступа к сетевым ресурсам? Такие вещи, как подключенные диски, могут присутствовать при входе в систему с учетной записью пользователя, но в зависимости от конфигурации сервера могут отсутствовать в контексте учетной записи пользователя при выполнении из планировщика задач.
  • Добавьте запись в ваш пакетный файл. После каждой выполняемой строки записывайте вывод в файл журнала, чтобы вы знали, где он застревает. Например:

    @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"
    
  • Попробуйте запустить .EXE с START, например START "myTitle" "C:\full\path\to\my.EXE"

Я отвечаю на старый пост на случай, если он кому-то поможет. Я была такая же проблема. В журнале событий сказано, что программа завершилась нормально, но даже первая строка кода не запишет в журнал для меня. В конечном итоге это была опция "Начать с" в планировщике задач. Мне пришло в голову, что программа работала нормально из командной строки, когда я был в текущем каталоге. В этом же каталоге находятся файлы манифеста и другие зависимости. Поэтому, если вы скажете, что запланированное задание должно быть запущено в том же каталоге, что и EXE, вы можете получить благоприятные результаты. Это было решение для меня.

Может это тебе поможет?

https://stackoverflow.com/questions/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be

У нас была похожая проблема, и ваше единственное решение состояло в том, что мы создали специальную учетную запись на сервере с автологином. Так что, если задача запускалась под уже зарегистрированным пользователем, наш.exe работал хорошо...

я знаю, что это не очень хорошее решение, но для нас это было единственное, что сработало. я не знаю, работает ли это для вас... (но с этим обходным путем вы должны проверить, действительно ли пользователь вошел в систему все время...)

Я пытался запустить старую программу VB6, используя планировщик задач на сервере Windows 2008 R2. Приложение будет запускаться из exe-файла, через командный файл или по нажатию на ярлык, но не будет запускаться из планировщика задач. Я обнаружил, что когда файлы конфигурации приложения, которые хранились в папке приложений в каталоге C:\program files (x86), были скопированы в папку приложения в папке c:\programdata. планировщик работал. похоже, что cmd.exe применяет конфигурацию из другого местоположения к тому, который используется планировщиком задач. Если в вашем приложении есть файлы конфигурации, вы можете попробовать переместить их в папку c:\programdata\application.

Вы ссылаетесь на какие-либо подключенные сетевые диски в вашем скрипте или программе? У меня была похожая проблема некоторое время назад, когда мое запланированное задание не запускалось, и я не мог понять, почему. Изменение пути (путей) к путям UNC решило это для меня.

+ Изменить T:\Apps\MyProgram.exe в \\MyServer\MyShare\Apps\MyProgram.exe

Может быть, ответ на этот вопрос поможет кому-то еще читать эту ветку?

https://stackoverflow.com/questions/32589381/

Сводка: запланированные задачи Windows 2012 не видят правильные переменные среды, в том числе PATH, для учетной записи, для которой задано задание.

Я прочитал все это довольно долго, прежде чем я понял вышеизложенное. (Который был моей собственной проблемой, приводящей к тому же самому вопросу ОП).

Как только вы (наконец-то!) Это знаете, это довольно легко проверить (согласно ответу от stackoverflow), увидеть, как это происходит, и обойти это....

Когда я настраиваю задачу, чтобы сказать "запускается ли пользователь вошел в систему или нет", а опция запуска с наивысшими привилегиями не отмечена, значением ошибки является 2147943859.

2147943859, преобразованный в шестнадцатеричный код, - 800705b3, что, по словам быстрой поездки в Google, означает: "Не удалось запустить программу установки на компьютер. Для этой операции требуется интерактивная оконная станция".

Теперь, возможно, есть какой-то способ заставить его работать в интерактивном режиме без использования PSEXEC (от Sysinternals), но так как я уже знаю, как сделать это через PSEXEC, это то, что я бы использовал.

PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Поэтому измените свое действие, добавив в него все psexec.exe -i (и -h, если вам нужно повысить его), и оно должно работать.

Я пробовал это на Windows Server 2008 R2 SP1 со следующим в моем "действии":

c:\windows\system32\cmd.exe

а затем параметры:

/c psexec.exe -h -i notepad.exe

Когда я запускаю задачу вручную (так как у меня ее нет по расписанию), в моем текущем сеансе запускается блокнот с повышенными правами.

Другие вопросы по тегам