Назад | Перейти на главную страницу

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

Ситуация

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

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

Настроить

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

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

Я подозреваю, что проблема

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

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


Редактировать о графическом интерфейсе

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


Обновить

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


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

ОС = Windows Server 2008 R2 SP1

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

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

Проверка требований к сеансу консоли

Возможно ваш .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

Когда я настраиваю задачу так, чтобы она говорила «запускать независимо от того, вошел ли пользователь в систему или нет», а параметр «Запуск с наивысшими привилегиями» не отмечен, значение ошибки составляет 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

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

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

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

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

Я прочитал все это довольно давно, прежде чем понял вышесказанное. (Это была моя собственная проблема, которая привела к тому же, что и вопрос OP.)

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