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


12

ситуация

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

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

Настроить

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

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

Что я подозреваю, это проблема

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

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


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

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


Обновить

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


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

ОС = Windows Server 2008 R2 SP1

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


Ваш сценарий и «программа» принимают какие-либо входные данные, такие как параметры или параметры? Вы пробовали использовать PowerShell вместо пакета? При запуске .exe«программы» с параметрами из скрипта, входные данные должны быть правильно представлены в качестве аргумента.
Слыблоты

1
Вы пробовали планировщик с другой программой? Просто замените одну программу другой и посмотрите, какие результаты вы получите.
Слыблоты

2
@ out-null Я не думаю, что планировщик задач использует окно, чтобы узнать, когда программа закончила работать, он должен ждать процесса, что бы он ни делал с окнами. Но если программа пытается найти что-то конкретное для создания своего заставки (скажем, панели задач) и не может найти его (потому что она работает на отдельной рабочей станции / оконной станции), возможно, она остановится ...
Ale

1
OK. Вы пытались запустить его под учетной записью LocalSystem? Кроме того, вы пытались отслеживать событие запуска процесса с помощью Process Monitor от Sysinternals?
Счастливчик Люк

1
@BradBouchard Несмотря на то, что ваш ответ может не решить вопрос OP в данном конкретном случае, он является действительным и может быть полезен для будущих посетителей SF, и поэтому я рекомендую вам не удалять его.
Я говорю, восстановите Монику

Ответы:


6

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

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

Возможно, ваш .EXE должен быть запущен в Consoleсеансе (он же Session 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"


2

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


Это было решение для запуска пользовательского консольного приложения, разработанного в Visual Studio с поддержкой файлов конфигурации.
биллфредтом

1

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

/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be

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

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


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

2
Вы сняли флажок «запускать с наивысшими привилегиями»? Я думаю, что когда вы отметили эту опцию, произойдет выявление прав (UAC), и вы не увидите окно, даже когда пользователь вошел в систему (будет вызвано в отдельном сеансе без окна и завершится ошибкой). Также попробуйте выбрать опцию «сконфигурировано для» -> «Windows Server 2003, Windows XP или Windows 2000».
frupfrup

Это , кажется , не имеет никакого значения, кроме случаев , когда я теперь установить «запустить ли зарегистрирован пользователь или нет» я получаю код ошибки 2147943859. Я могу только установить «настроенный для» либо Windows Vista/Windows Server 2008или Windows 7/Windows Server 2008 R2. Кажется, нет никакой разницы.
MarioDS

Ok. один последний тест: создайте новое задание с «создать новое задание» вместо «создать простое задание» (я не знаю, какой текст действительно отображается - мои серверы немецкие - но я надеюсь, что вы понимаете, о чем я.), а затем Я думаю, что вы можете выбрать «Windows Server 2003, ...». а затем, пожалуйста, попробуйте еще раз с другими вариантами ...
frupfrup

1

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

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

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


1

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


0

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

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


Нет, программа находится на локальном C:диске.
MarioDS

0

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

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

/programming/32589381/

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.