У меня есть раздел моего приложения, который позволяет людям отправлять электронные письма сгенерированного текста.Моя текущая проблема заключается в том, что когда они загружают форму с текстом, она генерирует необработанное исключение System.IO.FileNotFound, когда у пользователя не установлен outlook.При загрузке формы я пытаюсь определить, установлен ли у них outlook.
try{
//Assembly _out = Assembly.Load("Microsoft.Office.Interop.Outlook");
Assembly _out = Assembly.Load("Microsoft.Office.Interop.Outlook, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");
//Microsoft.Office.Interop.Outlook.Application _out = new Microsoft.Office.Interop.Outlook.Application();
//Microsoft.Office.Interop.Outlook.Application _out = new Microsoft.Office.Interop.Outlook.Application();
}
Выше приведен код, который я пробовал.На компьютере, на котором я работаю, если имя сборки не указано, операторы catch будут его ловить.Однако, когда я тестирую его на машине с XP без внешнего вида, он выдает ошибку и останавливает загрузку событий формы.
Каждый оператор catch, который я пробовал (Catch all, даже не работал):
catch (System.IO.FileLoadException)
{ _noOutlook = true; type = "FILE-LOAD"; }
catch (System.IO.FileNotFoundException)
{ _noOutlook = true; type = "FILE-NOT-FOUND"; }
catch (System.IO.IOException)
{ _noOutlook = true; type = "IO"; }
catch (System.Runtime.InteropServices.COMException)
{ _noOutlook = true; type = "INTEROP"; }
catch (System.Runtime.InteropServices.InvalidComObjectException)
{ _noOutlook = true; type = "INTEROP-INVALIDCOM"; }
catch (System.Runtime.InteropServices.ExternalException)
{ _noOutlook = true; type = "INTEROP-EXTERNAL"; }
catch (System.TypeLoadException)
{ _noOutlook = true; type = "TYPELOAD"; }
catch (System.AccessViolationException)
{ _noOutlook = true; type = "ACCESVIOLATION"; }
catch (WarningException)
{ _noOutlook = true; type = "WARNING"; }
catch (ApplicationException)
{ _noOutlook = true; type = "APPLICATION"; }
catch (Exception)
{ _noOutlook = true; type = "NORMAL"; }
Я ищу способ, который будет работать (надеюсь, так что я мог бы использовать один код для работы с Outlook 2010 и 2007) без проверки реестра / точного пути к файлу.
Вот несколько вещей, которые меня интересуют: почему XP даже выдает ошибки, а не перехватывает их, так как он выдает FileNotFound, когда у меня есть перехват для этого, и какой хороший способ определить, будет ли работать объект взаимодействия outlook.