(Есть очень похожая тема, которая так и не была решена: здесь )
У нас есть большое приложение, работающее на нескольких клиентах, но недавно часть моего кода перестала работать. Добавив отладочный код, я обнаружил, что код останавливается при вызове 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 по умолчанию было ЛОЖЬ ... Это неверно. По умолчанию это ИСТИНА. Это нормально?