Я пытаюсь открыть хранилище сообщений пользователя, используя MAPI. Странно то, что когда я запускаю это консольное приложение, когда я вошел в систему с пользователем, все работает нормально.
Но когда я запускаю это как службу Windows, я получаю MAPI_E_NOT_FOUND при попытке открыть MessageStore.
Я уже настроил службу для работы от имени пользователя.
Кажется, что MapiLogonEx работает нормально, и GetMsgStoreTables также дает мне правильные результаты (я подтвердил, что EntryID для MessageStore верен).
Вот мой код:
LPMAPITABLE pStoresTbl = NULL;
m_lpMAPISession->GetMsgStoresTable(0, &pStoresTbl);
// Query Collumns
LPSPropTagArray pTags = NULL;
LPSRowSet pRows = NULL;
pStoresTbl->SeekRow(BOOKMARK_BEGINNING,0,NULL);
pStoresTbl->QueryRows(
LONG_MAX,
NULL,
&pRows);
LPSBinary lpEntryID = NULL;
ULONG iprops;
for (iprops = 0; iprops < pRows->aRow[0].cValues; iprops++)
{
SPropValue sProp = pRows->aRow[0].lpProps[iprops];
if (PROP_ID(sProp.ulPropTag) == PROP_ID(PR_ENTRYID))
{
lpEntryID = &sProp.Value.bin;
break;
}
}
lpMDB = NULL;
HRESULT hres = m_lpMAPISession->OpenMsgStore(NULL,
lpEntryID->cb,
(LPENTRYID) lpEntryID->lpb,
NULL,
MDB_NO_DIALOG |
MDB_NO_MAIL | // spooler not notified of our presence
MDB_TEMPORARY | // message store not added to MAPI profile
MAPI_BEST_ACCESS,
&lpMDB);