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