Вопрос

Я пытаюсь создать надстройку 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() Убедитесь, что эта функция возвращает именно то, что вы думаете;Это занимает самый верхний окно на рабочем столе пользователя... что обычно бывает но не всегда окно, с которым вы пытаетесь работать, поэтому просто проверьте дважды.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top