Process.Start () не выполняется при запуске в качестве запланированной задачи

У меня есть консольное приложение .NET, написанное на C # (myApp.exe), которое запускает внешнее приложение ('bob.exe'). Консольное приложение отлично работает, когда я запускаю myApp.exe вручную. Код C #, вызывающий приложение:

System.Diagnostics.ProcessStartInfo procStartInfo =
    new System.Diagnostics.ProcessStartInfo("C:\\bob.exe");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;

// Do not create the black window.
procStartInfo.CreateNoWindow = true;

// Create the process and assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();

В Windows Server 2003 я создал запланированную задачу, которая регулярно запускала myApp.exe. Он был настроен на выполнение, даже если пользователь не вошел в систему. Запланированная задача работала и называлась «bob.exe» (я смог проверить это, просмотрев выходные файлы из «bob.exe»)

Затем мы обновились до Windows Server 2012. Я создал запланированную задачу в Windows Server 2012, настроив ее на выполнение, даже если пользователь не вошел в систему, и настроил ее для Windows Server 2003.

Я установил действие для вызова 'C: \ myApp.exe', аналогично тому, как я настроил его в Windows Server 2003.

Когда запланированные задачи выполняются и я вхожу в систему, приложение «bob.exe» запускается из «myApp.exe». Однако, когда я не вошел в систему и выполняется запланированная задача, выполняется myApp.exe, но никогда не выполняется bob.exe (я могу убедиться в этом, увидев, что файлы вывода из bob.exe отсутствуют). Запланированная задача не сообщает об ошибках, а в последнем результате выполнения указано «Операция успешно завершена. (0x0)».

Я нашел похожее сообщение здесь но я не смог разрешить свою ситуацию. Что мне не хватает?


person RRemote518    schedule 18.05.2015    source источник
comment
А сообщение об ошибке?   -  person Matías Fidemraizer    schedule 18.05.2015
comment
Запланированная задача не возвращает сообщений об ошибках. Результат последнего запуска говорит о том, что операция завершена успешно.   -  person RRemote518    schedule 18.05.2015
comment
Добавить журнал ошибок. Тебе все равно нужно это сделать. Дайте нам исключение ToString output. Также может быть, что bob.exe успешно запустился и вскоре после этого завершился с ошибкой.   -  person usr    schedule 18.05.2015
comment
@usr Приложение «bob.exe», которое запускается из proc.Start (), является внешним сторонним приложением. Поскольку я запускаю bob.exe как отдельный процесс, исходное приложение (myApp.exe) не имеет доступа ни к каким исключениям. Обратите внимание: вся моя функция, запускающая внешнее приложение, заключена в try / catch. Нет никаких выброшенных / пойманных исключений. Название этого вопроса немного вводит в заблуждение. В Process.Start () нет сбоев. Похоже, что он просто не выполняется, когда приложение запускается как запланированная задача, а пользователь не вошел в систему.   -  person RRemote518    schedule 19.05.2015
comment
Тогда ваша лучшая надежда на отладку - это захватить вывод команды bob на консоль и прикрепить трассировку монитора процесса. Произойдет какое-то нарушение прав доступа или доступ к непредвиденному пути.   -  person usr    schedule 19.05.2015


Ответы (2)


У меня была аналогичная проблема с моим приложением, вызывающим 7za.exe для архивации резервных копий БД. Когда я запускал свое приложение вручную, оно работало нормально, но когда я планировал свое приложение с помощью планировщика задач, процедура 7z не запускалась и не выдавала моему приложению подробную ошибку. Я обнаружил, что добавление каталога, из которого я запускал свое приложение, в поле «Начало в (необязательно):» планировщика задач исправило мою проблему.

Программа / сценарий: "C: \ Program Files (x86) \ CustApp \ CustApp.exe"

Начать в (необязательно) C: \ Program Files (x86) \ CustApp \

Обратите внимание, что нельзя использовать двойные кавычки в настройке «Начать в (необязательно)» для каталога, это приведет к ошибке, когда я это сделал.

person icvader    schedule 08.11.2017
comment
Я пробовал это на Win Server 2016, и это сработало. Пользователь уже определен, с которым он должен выполнять задачу. Спасибо. - person Nilesh Thakkar; 11.03.2019

У меня была аналогичная проблема с запуском пакетного файла (на WS2008), и проблема была связана с разрешениями, предоставленными пользователю, выполняющему запланированную задачу, в папках, в которых были установлены пакетный файл и исполняемые файлы. Я не уверен, что безопасность WS 2012 отличается, но на вашем месте я попытаюсь отладить приложение (если у вас есть код), проверяя разрешения. HTH

person Sabrina_cs    schedule 18.05.2015
comment
Запланированная задача настроена на выполнение с использованием одного и того же имени пользователя / учетной записи, когда она работает (т. Е. Когда я вошел в систему и задача расписания запускается автоматически) и когда она не работает (т. Е. Когда я не вошел в систему и запланированная задача запускается автоматически). Будет ли проблема с разрешениями при этой настройке? - person RRemote518; 18.05.2015
comment
Я думаю, что Кто-то с большим опытом работы в качестве системного администратора сможет ответить вам лучше, я могу сказать, что запланированная задача, которая годами работала в нашей системе, перестала работать пару недель назад, и мы не изменили разрешение пользователя, запускающего его как с исполняемыми, так и с пакетными файлами, а также с папками, к которым у пользователя был доступ. Даже в нашем случае задание не выдало никаких сообщений об ошибках, но задачи не были выполнены, я думаю, вам нужно проверить политики безопасности для пользователя и увидеть, если при работе в качестве учетной записи службы его разрешения каким-либо образом изменены. - person Sabrina_cs; 19.05.2015