2010-12-07 4 views
0

У меня есть приложение, которое создает профиль MAPI для отправки писем/сообщений. Профиль создается правильно в среде Outlook2007, но он не создается должным образом в среде Outlook2007 SP2. И исходный код, и «среда обмена, в которой профиль MAPI/outlook» одинаковы. Профиль создается с помощью подсистемы MAPI.Мое приложение не удалось правильно создать профиль MAPI/Messaging с использованием подсистемы 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

ответ

0

Ваша проблема в # 2 записную:

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

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

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

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

0

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

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

Saravanan

Смежные вопросы