Process.Start блокируется / зависает случайным образом на некоторых клиентах

(Есть очень похожая тема, которая так и не была решена: здесь )

У нас есть большое приложение, работающее на нескольких клиентах, но недавно часть моего кода перестала работать. Добавив отладочный код, я обнаружил, что код останавливается при вызове Process.Start () (без установки shellexecute = true).

Вызов является простым

 Process.Start(new ProcessStartInfo("program"))    

в потоке BackgroundWorker.

"Программа" приложение выполняет то, что должно, и завершает работу.

Наше приложение продолжает работу, поскольку поток находится в фоновом режиме, но если приложение запускает другой процесс Process.Start в потоке графического интерфейса пользователя, приложение блокируется. Если приложение закрывается с помощью кнопки X, оно все равно отображается в диспетчере задач, поскольку поток все еще блокируется Process.Start.

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

Что могло произойти, чтобы Process.Start () завис? (Program.Main отмечен [STAThread])

В настоящее время я только что сделал обходной путь, который запускает Process.Start () в своем собственном потоке, убивая его через 5 секунд, если он не вернулся к тому времени. Но это слишком много для пользователя, ожидающего возврата кода (я не знаю, насколько низко я могу установить тайм-аут, поскольку мне нужно возвращаемое значение в Process. Start () в некоторых случаях).

Могут ли мешать антивирусы? (на клиентах установлен Symantec AV)

ОБНОВЛЕНИЕ: Я предполагал, что когда я сделал

ProcessStartInfo psi = new ProcessStartInfo("ping", "localhost");

, что psi.UseShellExecute по умолчанию было ЛОЖЬ ... Это неверно. По умолчанию это ИСТИНА. Это нормально?

7
задан Community 23 May 2017 в 11:51
поделиться