Встроенный элемент управления представлением Outlook
-
02-07-2019 - |
Вопрос
Я пытаюсь создать надстройку Outlook 2003 с помощью Visual Studio 2008 в Windows XP SP3 и Internet Explorer 7.
Моя надстройка использует настраиваемую домашнюю страницу папки, на которой отображается моя настраиваемая форма, обертывающая элемент управления представлением Outlook.
Я получаю исключение COM с «Исключением из HRESULT:0xXXXXXXXX» каждый раз, когда я пытаюсь установить свойство Folder OVC.Код ошибки — случайное число, каждый раз разное.Это не первый доступ к свойствам элемента управления, до этого уже были установлены свойства View и ViewXML.Элемент управления помечен как безопасный для сценариев.
Я использую значение свойства CurrentFolder.FolderPath активного проводника, которое кажется правильным:
Outlook.Explorer currentExplorer = app.ActiveExplorer();
if (currentExplorer != null)
{
ovcWrapper.Folder = currentExplorer.CurrentFolder.FolderPath;
}
Это верхняя часть трассировки стека:
System.Runtime.InteropServices.COMException (0xXXXXXXXX): Exception from HRESULT: 0xXXXXXXXX
at Microsoft.Office.Interop.OutlookViewCtl.ViewCtlClass.set_Folder(String pVal)
at AxMicrosoft.Office.Interop.OutlookViewCtl.AxViewCtl.set_Folder(String value)..
Это происходит только в том случае, если папка находится в PST-файле, отличном от стандартного.Переход в папку внутри файла PST по умолчанию не вызовет исключений.
Должен подчеркнуть, что до моего отъезда в отпуск все работало нормально :).Похоже, что Windows XP установила некоторые обновления, которые изменили безопасность Internet Explorer или Outlook 2003 по умолчанию, пока меня не было.
На другом (виртуальной машине) с Office 2007 и Internet Explorer 6, без каких-либо обновлений, всё работает нормально.
Решение
Через некоторое время я наконец узнаю, в чем заключается решение:измените имя внешнего хранилища на что-то новое.
При запуске надстройки она загружает нестандартный PST-файл и меняет его имя (не имя pst-файла, а имя корневой папки) на «Документы».
Это код:
session.AddStore("C:\\test.pst"); // loads existing or creates a new one, if there is none.
storage = session.Folders.GetLast(); // grabs root folder of the new fileStorage.
if (storage.Name != storageName) // if fileStorage is brand new, it has default name.
{
storage.Name = "Documents";
session.RemoveStore(storage); // to apply new fileStorage name, it have to be removed and added again.
session.AddStore(storagePath);
}
Решение состоит в том, чтобы больше не использовать «Документы» в качестве имени, а использовать что-то новое.Проблема не связана с конкретным именем.
Другие советы
Добри Дэн, Нэнси :)
Я не знаю, могу ли я действительно предложить решение «серебряной пули», учитывая информацию здесь... но вот несколько идей/примечаний, которые стоит попробовать:
Работая с Outlook в нескольких проектах в прошлом, я могу сказать вам, что иногда это забавная птица, когда дело доходит до предоставления/предоставления доступа внешним пользователям/процессам.Иногда пользователю требуется вручную подтвердить доступ или войти в систему... поэтому убедитесь, что у вас есть
app.Session.Logon()
где-то позаботился.
Еще одна вещь, которую я заметил, это использование app.ActiveExplorer()
Убедитесь, что эта функция возвращает именно то, что вы думаете;Это занимает самый верхний окно на рабочем столе пользователя... что обычно бывает но не всегда окно, с которым вы пытаетесь работать, поэтому просто проверьте дважды.