(Существует очень похожая тема, которая так и не была решена: здесь )
У нас большое приложение, работающее на нескольких клиентах, но недавно часть моего кода перестала работать.Добавляя некоторый отладочный код, я обнаружил, что код останавливается при вызове Process.Start () (без установки shellexecute = true).
Это простой вызов
Process.Start(new ProcessStartInfo("program"))
вТема BackgroundWorker.
Приложение "программа" делает то, что должно делать, и завершает работу.
Наше приложение продолжает работу, поскольку поток находится в фоновом режиме, но если приложение запускает другой Process.Start в потоке GUI,приложение блокируется.Если приложение закрывается с помощью кнопки X, оно все равно отображается в диспетчере задач, поскольку поток по-прежнему блокируется процессом. Запуск.
Проблема заключается в том, что это поведение невозможно воспроизвести.Это происходит случайным образом на некоторых клиентских компьютерах.
Что может произойти, чтобы Process.Start () зависал?(Program.Main помечен [STAThread])
В настоящее время я только что сделал обходной путь, который запускает Process.Start () в его собственном потоке, убивая его через 5 секунд, если он не вернулся к тому времени.Но это 5 секунд для пользователя, ожидающего возврата кода (я не знаю, насколько низким я могу установить тайм-аут, так как в некоторых случаях мне нужно возвращаемое значение для Process.Start ()).
Могут ли антивирусные программы вмешиваться?(на клиентах установлен Symantec AV)
ОБНОВЛЕНИЕ: Я предполагал, что когда я сделал
ProcessStartInfo psi = new ProcessStartInfo("ping", "localhost");
, то psi.UseShellExecute был ЛОЖЬ по умолчанию ... Это не правильно.По умолчанию TRUE.Это нормально?