Процесс. Старт очень медленный

В настоящее время я использую этот метод, и он отлично работает:

public static void CreateEmailInDefaultMailEditor(string to, string subject, string body)
{
    Process.Start($"mailto:{to}?subject={subject}&body={body}");        
}

Затем я попробовал его на другом компьютере, и он тоже там работает, но он ОЧЕНЬ медленный (больше одной минуты, чтобы открыть мой почтовый редактор!).
Я отладил Process.Start (в System.dll) и обнаружил, что проблема была в конце NativeMethod.ShellExecuteEx метод, который работает очень медленно.

Я также заметил, что указав название программы, которая должна открыться для отправки электронного письма

public static void CreateEmailInOutlook(string to, string subject, string body)
{
    Process.Start("outlook.exe", $"mailto:{to}?subject={subject}&body={body}");        
}

решает проблему, но это не объясняет, почему он работает правильно на компьютере, а не на другом, и это не делает то же самое: если не указать программу, автоматически открывается программа по умолчанию.

Поэтому вопрос довольно прост: почему такое поведение и как его обойти?

2 ответа

Решение

Спасибо за ответы и комментарии.

Вот небольшое обновление вопроса и, возможно, решение (я все еще не совсем уверен, в чем проблема): я мог воспроизвести проблему на всех компьютерах моего отдела, которые я тестировал (а не только на двух, как указано в моем вопросе). Через несколько дней я заметил, что все снова работает. Я не изменил код моей программы и не отключил антивирус.

Что я не упомянул в своем вопросе (я думал, что это не важно), так это то, что все компьютеры были новыми. И я думаю, что это может быть проблемой: в Windows есть служба индексирования, и я могу себе представить, что в начале может пройти несколько дней, пока весь компьютер не будет отсканирован. Поиск почтового менеджера по умолчанию в этом случае может занять много времени, но как только служба индексирования выполнит свою работу, поиск почтового менеджера по умолчанию снова будет быстрым.

Вы, вероятно, не найдете этот ответ очень удовлетворительным.

На мой взгляд, ваш оригинальный код, который запускает mailto: URL через оболочку должен быть предпочтительнее, чем пересмотренный код, который делает предположение о конкретном почтовом клиенте. Не специально начать outlook.exe, Там нет никакой гарантии, что этот процесс доступен или может быть расположен на любой машине.

Что касается плохой производительности:

"Затем я попробовал это на другом компьютере…"

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

  • Только если ваши предположения будут проверены, вам нужно будет изменить свой код (даже если у вас нет реальных альтернатив оригинальному коду IMHO).
  • Если, однако, окажется, что одна другая машина, на которой вы пробовали свою программу, работает медленнее, чем большинство других, то она может быть просто неправильно настроена, и ваша программа не должна обойти этот факт.
Другие вопросы по тегам