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

Ситуация

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

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

Установка

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

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

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

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

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


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

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


Обновление

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


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

ОС = Windows Server 2008 R2 SP1

Если больше информации необходимо, сообщите мне в комментариях.

12
задан 8 October 2014 в 14:54
8 ответов

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

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

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

1
ответ дан 2 December 2019 в 21:38

может быть, это вам поможет?

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

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

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

.
1
ответ дан 2 December 2019 в 21:38

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

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

0
ответ дан 2 December 2019 в 21:38

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

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

0
ответ дан 2 December 2019 в 21:38

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

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

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

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

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

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

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

  1. Предоставьте учетной записи право пользователя Вход в качестве пакетного задания (находится в локальной групповой политике в Конфигурация компьютера / Параметры Windows / Параметры безопасности / Локальные политики / Назначение прав пользователей )
  2. Подтвердите, что задача настроена на Запуск с наивысшими привилегиями
  3. Подтвердите, что у пользователя есть полные разрешения NTFS для всех папок и файлов, с которыми он должен взаимодействовать. Не делайте предположений; вместо этого подтвердите, перейдя к таким расположениям файлов и используя вкладку Действующие разрешения в свойствах файла / папки в Безопасность> Дополнительно

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

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

     @echo off
    echo Строка 1 >> "C: \ MyLog.txt"
     "C: \ Моя папка \ myOldProgram.exe"
    echo Строка 2 >> "C: \ MyLog.txt"
    DEL somefile.dat
    echo Строка 3 >> "C: \ MyLog.txt"
     
  • Попробуйте запустить .EXE с START , например START "myTitle" "C:\ полный \ путь \ к \ my.EXE "

6
ответ дан 2 December 2019 в 21:38

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

2
ответ дан 2 December 2019 в 21:38

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

1
ответ дан 2 December 2019 в 21:38

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

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

Резюме: Windows 2012 Scheduled Tasks do not see the correct environment variables, including PATH, for the account which is set to run as.

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

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

.
0
ответ дан 2 December 2019 в 21:38

Теги

Похожие вопросы