Программа не работает должным образом как запланированная задача
ситуация
У меня есть пакетный скрипт, который готовит некоторые файлы, выполняет программу (.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) на компьютере. Чтобы проверить это:
- Сконфигурируйте задачу на Запуск только тогда, когда пользователь вошел в систему, и укажите время начала задачи 2 минуты в будущем.
- Войдите в систему с той же учетной записью пользователя, которая использовалась для запуска задачи (предпочтительно войдите в сеанс консоли, либо физически находясь на консоли, либо с помощью программы удаленного доступа, которая предоставляет доступ к консоли. Чтобы подтвердить, что вы используете консольный сеанс из командной строки
QWINSTA
соблюдатьSESSIONNAME
и подтвердите>
индикатор рядом сconsole
другими словами это должно выглядеть как>console
) - Дождитесь запуска задания
Если задача выполняется правильно, попробуйте запланировать задачу с помощью SCHTASKS.EXE
с использованием/IT
параметр. В противном случае у вас может не быть иного выбора, кроме как настроить компьютер для автоматического входа в систему в качестве учетной записи пользователя службы и запуска задачи в качестве запускаемой программы.
Проверьте разрешения
Кроме того, как я уже предложил, проверьте следующее, чтобы убедиться, что учетная запись, используемая для запуска задачи, имеет соответствующие разрешения:
- Предоставьте учетной записи правовхода в систему как пользователь пакетного задания (находится в локальной групповой политике по адресу
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
) - Подтвердите, что задача настроена на Запуск с самыми высокими привилегиями.
- Убедитесь, что у пользователя есть полные разрешения 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, вы можете получить благоприятные результаты. Это было решение для меня.
Может это тебе поможет?
У нас была похожая проблема, и ваше единственное решение состояло в том, что мы создали специальную учетную запись на сервере с автологином. Так что, если задача запускалась под уже зарегистрированным пользователем, наш.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
Когда я запускаю задачу вручную (так как у меня ее нет по расписанию), в моем текущем сеансе запускается блокнот с повышенными правами.