Вопрос

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

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

Я пытался изменить UseShellExecute Собственность, то CreateNoWindow Собственность и WindowStyle собственность, не влиять. ErrorDialog и то RedirectStandard* Свойства ложные.

Код, который я использую следующим образом:

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

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

Это было полезно?

Решение

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

Я бы предположил, чтобы вы использовали проводник процесса и монитор процесса для поиска потенциальных проблем.

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top