.NET процессы в планировщике заданий - PullRequest
0 голосов
/ 24 декабря 2009

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

Process p = Process.Start("program2.exe");

while (!p.HasExited)
    Thread.Sleep(10000);

if (p.HasExited)
{
    // Execute more code
}

Это прекрасно работает, когда я запускаю программу. Но не работает, когда он используется в качестве запланированной задачи в Windows. эта часть никогда не исполняется

if (p.HasExited)
{
    // Execute more code
}

Не могу найти способ отладить это. Я застрял в этой программе уже неделю.

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Ваш код будет проще, если вы предположите, что если p.HasExited имеет значение true, то оно остается таким. Затем вы можете удалить оператор if. Тогда есть только три оставшихся способа, которыми я вижу, что ваш код может дать результат, который вы видите:

  1. Второй процесс никогда не завершается. Вы видите это в диспетчере задач?
  2. Ваш код вызывает исключение. Вы где-нибудь регистрируете исключения?
  3. Второй процесс завершается, но никогда не сообщает HasExited.

Можете ли вы попытаться сначала исследовать и устранить 1 и 2? Хорошей идеей будет сначала рассмотреть простые альтернативы.

Обновление: из комментариев Эндрю Кит также предположил, что код может вообще не выполняться. Вставьте операторы журнала свободно, чтобы вы могли точно видеть, что происходит. Войдите в файл, например.

0 голосов
/ 24 декабря 2009

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

Вы можете просмотреть журнал планировщика заданий (в панели управления планировщика заданий -> расширенное меню). Он должен дать код выхода для вашей задачи как ноль (или, возможно, один). Что-то не так, если вы получаете очень большой код выхода.

Да, и Process.WaitForExit (), вероятно, чище, чем ваш цикл опроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...