Process.Start медленно при порождении новых процессов - PullRequest
0 голосов
/ 18 августа 2010

Процессы, запущенные через Process.Start, похоже, имеют задержку примерно в 26 секунд, когда порожденный процесс («дочерний») запускает больше новых процессов («внуков») - я пытаюсь найти способ решить эту проблемувопрос.В частности, это происходит, когда исходный процесс («родительский») является веб-сайтом ASP.Net или службой Windows (пробовал оба).

Мы пытаемся запустить средство командной строки на стороне сервера для сбора информации, внесения изменений в файловую систему и продолжения работы с другими процессами после завершения «потомка».При создании «потомка» напрямую через командную строку задержка отсутствует, а при определенных параметрах командной строки «потомок» не порождает новые процессы и задержка отсутствует.Однако с другими параметрами «потомок» порождает «внуков» (тот же исполняемый файл, что и он сам, но мы не можем изменить его код) и, похоже, задерживается на 25–30 секунд (обычно 26 секунд) до того, как первый процесс завершится.запущен, а затем работает нормально.

Я пытался изменить свойства UseShellExecute, свойства CreateNoWindow и WindowStyle, но безрезультатно.ErrorDialog и свойства RedirectStandard* имеют значение false.

Я использую следующий код:

using (Process p = new Process())
{
    p.StartInfo = new ProcessStartInfo(exePath, args)
    {
        WorkingDirectory = workingDirectory,
        UseShellExecute = true,
        CreateNoWindow = true,
    };
    p.Start();
    p.WaitForExit();
}

О, я не думаю, что это имеет значение, поскольку явидел проблему, на которую ссылаются в другом месте (но нет решений), но exePath, который я использую, указывает на git.exe msysgit.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

У меня была та же самая проблема с выполнением файла .bat, который, в свою очередь, вызвал git.cmd с помощью Process.Start из службы Windows. Команда git будет выполнена немедленно, если файл .bat был запущен непосредственно из командной строки, но будет задерживаться ровно на 50 секунд при каждом вызове из службы Windows.

Дело дошло до разрешения. После настройки моей службы Windows для запуска от имени пользователя (в моем случае администратора) процесс git запустился немедленно. Вероятно, вы можете изменить свой установщик службы для запуска службы как «Пользователь», но вы можете просто изменить свойства службы после того, как она будет установлена ​​таким же образом.

Могут быть способы, чтобы «Локальная служба» могла обойти задержку, но я не знаю, как.

1 голос
/ 18 августа 2010

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

Я бы посоветовал вам использовать Process Explorer и Process Monitor для поиска потенциальных проблем.

Я бы предположил, что проблема связана не непосредственно с вашим кодом, а больше связана со средой пользователя,Например, процесс w3wp.exe выполняется в сеансе без графического интерфейса пользователя (сеанс 0), и у пользователя может не быть настроен веб-доступ (конфигурация прокси-сервера), чтобы вы могли увидеть здесь проблему тайм-аута.

...