Моему приложению не удается правильно создать профиль MAPI / Messaging с использованием подсистемы MAPI - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть приложение, которое создает профиль MAPI для отправки писем / сообщений. Профиль создается должным образом в среде Outlook2007, но не создается должным образом в среде Outlook2007 с пакетом обновления 2 (SP2). И исходный код, и «среда обмена, в которой используется профиль MAPI / outlook» одинаковы. Профиль создается с использованием подсистемы MAPI.

Описание приложения: Приложение представляет собой приложение на основе службы Windows. Служба выполняет приложение COM. Приложение COM порождает новый поток для создания нового профиля и отправляет образец сообщения.

Актуальная проблема: во время создания профиля вызов функции ConfigureMsgService (которая принадлежит IMsgServiceAdmin) не работает должным образом, даже если он возвращает S_OK. Значение 5-го параметра «lpProps» функции ConfigureMsgService приведено ниже.

    // First, the mailbox name.
    ZeroMemory(&rgval[0], sizeof(SPropValue) );
    rgval[0].ulPropTag = PR_PROFILE_UNRESOLVED_NAME; 
    rgval[0].Value.lpszA = szMailbox;

    // Next, the server name.
    ZeroMemory(&rgval[1], sizeof(SPropValue) );
    rgval[1].ulPropTag = PR_PROFILE_UNRESOLVED_SERVER;
    rgval[1].Value.lpszA = szServer;

    // For NT Services, need to do this to keep MAPI from
    // displaying dialog boxes.
    ZeroMemory(&rgval[2], sizeof(SPropValue) );
    rgval[2].ulPropTag = PR_CONVERSION_PROHIBITED;  //As the com application is executed by the NT service, this parameter is specified.
    rgval[2].Value.b = TRUE;

Также обратите внимание, что до вызова функции ConfigureMsgService все остальные вызовы MAPI, такие как MAPIInitialize, MAPIAdminProfiles, CreateProfile, AdminServices, CreateMsgService, GetMsgServiceTable и т. Д., Были успешно завершены.

Мой вопрос: тот же код работал правильно в среде Outlook 2007, но в среде Outlook 2007 с пакетом обновления 2 (SP2) произошел сбой.

Обратите внимание, 1. когда тот же код выполняется из автономного приложения, он работал нормально. 2. Код не работал должным образом, если служба выполняется как учетная запись локальной системы или как учетная запись сетевой службы.

  1. В чем может быть проблема? Я что-то упустил?
  2. Есть ли обходной путь?

Заранее спасибо Saravanan

Ответы [ 2 ]

0 голосов
/ 04 января 2011

Спасибо за ваш ответ.

Я попробовал вашу идею, но она не сработала.Я говорил с Microsoft в этом случае, они предоставили исправление для этой проблемы (http://support.microsoft.com/kb/972363), это исправило это.

Сараванан

0 голосов
/ 31 декабря 2010

Ваша проблема в # 2 вашей заметки:

Обратите внимание, 1. когда тот же код выполняется из автономного приложения, он работал нормально.2. Код не работает должным образом, если служба выполняется как Локальная системная учетная запись или как учетная запись сетевой службы .

Профили MAPI хранятся в кусте текущего пользователя.* в реестре (HKEY_CURRENT_USER и HKEY_USERS {SID пользователя}).Системные учетные записи (LocalSystem и NetworkService) не отображают куст пользователя, который необходим MAPI для записи информации о профиле.

Самое простое решение - запустить службу под учетной записью пользователя, которому был предоставлен вход в систему.Как сервисное право.В зависимости от того, как ваше COM-приложение запускается как (в proc против out, proc), вы можете запустить его как определенный пользователь вместо системной учетной записи.

* Hive - это термин, используемый для различныхразделы реестра.Здесь мы имеем дело с собственным разделом реестра пользователя.

...