Jak tworzyć profile MAPI bez instalowania programu Outlook

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 306962 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

Zgodnie z powszechnym błędnym mniemaniem klient MAPI, taki jak Microsoft Outlook lub klient programu Exchange, musi być zainstalowany na serwerze programu Microsoft Exchange, aby można było tworzyć profile MAPI. Instalowanie klienta MAPI w tym celu jest zbędne. W przypadku programu Outlook instalowanie klienta MAPI na produkcyjnych serwerach nie jest zalecane. Gdy podsystem MAPI jest zainstalowany, istnieje wiele różnych innych sposobów tworzenia profili MAPI. W przypadku programu Exchange podsystem MAPI jest zainstalowany.

Więcej informacji

Metody tworzenia profili MAPI

Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost lub domyślnie, w tym także, bez ograniczeń, ustawowej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Inżynierowie pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu zasad działania określonej procedury, ale nie będą modyfikować tych przykładów ani dodawać żadnej funkcji i konstruować nowych procedur w celu dostosowania ich do określonych potrzeb użytkownika.

Przed próbą zastosowania dowolnej z tych metod należy się upewnić, że w pliku Mapisvc.inf na serwerze zostały podane właściwe wpisy. Aby uzyskać więcej informacji dotyczących sposobu modyfikowania tego pliku, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
294470 How to add entries for Exchange services to Mapisvc.inf

Użycie narzędzia NewProf.exe

Plik NewProf.exe jest dostarczany razem z programem Outlook. Aby uzyskać więcej informacji dotyczących sposobu korzystania z tego narzędzia, odwiedź następującą witrynę usługi MSDN (Microsoft Developer Network) w sieci Web:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mapi/html/3240685a-f8a8-48a1-8ec5-8dac8869877f.asp
Aby uzyskać więcej informacji, kliknij następujące numery artykułów w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:
145905 Newprof.exe command-line options
148664 Description of the Profile Descriptor File

Użycie przykładowego programu ProfMan2

W tym programie przykładowym jest wykorzystywany interfejs MAPI IProfAdmin, wspomniany w sekcji „Użycie interfejsu MAPI IProfAdmin”. Aby uzyskać ten program przykładowy, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
228736 Profman2.exe — MAPI Profile Manager v2.0

Użycie funkcji MAPILogonEx

Wywołanie funkcji MAPILogonEx przy ustawionej fladze MAPI_LOGON_UI bez podania profilu powoduje wyświetlenie kreatora profili, jeśli na komputerze nie ma żadnych profili. Jeśli profile istnieją, zostanie wyświetlone okno dialogowe Wybieranie profilu interfejsu MAPI. Kliknij przycisk Nowy, aby uruchomić kreatora profilu.
Przykładowy kod
// Funkcja CreateProfileWithMAPILogonEx: Wykorzystuje przycisk 
// „Nowy” okna dialogowego monitu profilu.
bool CreateProfileWithMAPILogonEx()
{
    HRESULT         hRes = S_OK;        // Kod zwrotny wywołań interfejsu MAPI.
    LPMAPISESSION   lpSession = NULL;   // Wskaźnik sesji MAPI.

    // Inicjowanie interfejsu MAPI.
    if (FAILED(hRes = MAPIInitialize(NULL)))
    {
        cout<<"Błąd inicjacji MAPI. hRes = 0x"<<hex<<hRes<<dec<<endl;
        return FALSE;
    }

    // Pouczenie użytkownika, aby kliknął przycisk „Nowy”.
    cout<<"Po pojawieniu się okna dialogowego \"Wybierz profil\" kliknij przycisk \"Nowy\","
        <<"aby skonfigurować nowy profil."<<endl;

    // Wywołanie funkcji MAPILogonEx w celu wyświetlenia okna dialogowego wyboru profilu.
    if (FAILED(hRes = MAPILogonEx(NULL,
                                  NULL,
                                  NULL,
                                  MAPI_LOGON_UI,
                                  &lpSession)))
    {
        cout<<"Błąd logowania. hRes = 0x"<<hex<<hRes<<dec<<endl;
        return FALSE;
    }

    // Wylogowanie sesji.
    if (FAILED(hRes = lpSession->Logoff(0,0,0)))
    {
        cout<<"Błąd wylogowania. hRes = 0x"<<hex<<hRes<<dec<<endl;
    }

    // Zwolnienie sesji.
    lpSession->Release();

    // Deinicjowanie interfejsu MAPI.
    MAPIUninitialize();

    // wartość TRUE oznacza powodzenie.
    return TRUE;
}
				

Użycie funkcji LAUNCHWIZARDENTRY

Ta funkcja wywołuje bezpośrednio kreator profilu.
Przykładowy kod
// Funkcja CreateProfileWithLAUNCHWIZARD: Używa funkcji API LAUNCHWIZARDENTRY,
// aby wyświetlić kreatora konfiguracji profili.
bool CreateProfileWithLAUNCHWIZARD()
{
    HRESULT     hRes = S_OK;                    // Kod zwrotny wywołań interfejsu MAPI.
    TCHAR       szProfName[80] = {0};           // Ciąg przechowujący nazwę profilu.
    LPTSTR      szServices[] = {"MSEMS", NULL}; // Ciąg przechowujący nazwy usług komunikatów.

    // Wywołanie funkcji LaunchWizard, aby dodać usługę MSEMS.
    if (FAILED(hRes = LaunchWizard(NULL,
                                   NULL,
                                   (LPCTSTR *)szServices,
                                   80,
                                   szProfName)))
    {
        cout<<"Błąd wywołania kreatora. hRes = 0x"<<hex<<hRes<<dec<<endl;
        return FALSE;
    }

    // wartość TRUE oznacza powodzenie.
    return TRUE;
}
				

Korzystanie z interfejsu MAPI IProfAdmin

Interfejs MAPI pozwala na programowe utworzenie profilu bez interwencji użytkownika.
Przykładowy kod
// Funkcja CreateProfileWithIProfAdmin: Wykorzystuje interfejs MAPI IProfAdmin do
// programowego utworzenia profilu. Interfejs użytkownika nie jest wyświetlany.
bool CreateProfileWithIProfAdmin()
{
    HRESULT         hRes = S_OK             // Kod zwrotny wywołań interfejsu MAPI.
    LPPROFADMIN     lpProfAdmin = NULL;     // Obiekt administratora profilu.
    LPSERVICEADMIN  lpSvcAdmin = NULL;      // Obiekt administratora usługi.
    LPMAPITABLE     lpMsgSvcTable = NULL;   // Tabela przechowująca usługi.
    LPSRowSet       lpSvcRows = NULL;       // Zestaw wierszy przechowujący wyniki kwerendy tabeli.
    SPropValue      rgval[2];               // Struktura właściwości do przechowywania wartości, które mają być ustawione.
    SRestriction    sres;                   // Struktura ograniczeń.
    SPropValue      SvcProps;               // Struktura właściwości ograniczenia.
    char            szProfile[80] = {0};    // Ciąg przechowujący nazwę profilu.
    char            szMailbox[80] = {0};    // Ciąg przechowujący nazwę skrzynki pocztowej.
    char            szServer[80] = {0};     // Ciąg przechowujący nazwę serwera.

    // Tu są wskazywane kolumny, które mają być zwrócone przez kwerendę HrQueryAllRows.
    enum {iSvcName, iSvcUID, cptaSvc};
    SizedSPropTagArray(cptaSvc,sptCols) = { cptaSvc, PR_SERVICE_NAME, PR_SERVICE_UID };

    // Pobranie informacji konfiguracyjnych od użytkownika.
    cout<<"Podaj nazwę profilu: ";
    cin>>szProfile;
    cout<<"Podaj nazwę skrzynki pocztowej programu Exchange: ";
    cin>>szMailbox;
    cout<<"Podaj nazwę serwera programu Exchange: ";
    cin>>szServer;

    // Inicjowanie interfejsu MAPI.

    if (FAILED(hRes = MAPIInitialize(NULL)))
    {
        cout<<"Błąd inicjacji MAPI.";
        goto error;
    }

    // Użycie interfejsu IProfAdmin

    if (FAILED(hRes = MAPIAdminProfiles(0,              // Flagi.
                                        &lpProfAdmin))) // Wskaźnik do interfejsu IProfAdmin.
    {
        cout<<"Błąd dostępu do interfejsu IProfAdmin.";
        goto error;
    }

    // Utworzenie nowego profilu.

    if (FAILED(hRes = lpProfAdmin->CreateProfile(szProfile,     // Nazwa nowego profilu.
                                                 NULL,          // Hasło dla nowego profilu.
                                                 NULL,          // Dojście do okna nadrzędnego.
                                                 NULL)))        // Flagi.
    {
        cout<<"Błąd przy tworzeniu profilu.";
        goto error;
    }

    // Wyłączenie interfejsu IMsgServiceAdmin z interfejsu IProfAdmin.

    if (FAILED(hRes = lpProfAdmin->AdminServices(szProfile,     // Profil, który ma być modyfikowany.
                                                 NULL,          // Hasło dla tego profilu.
                                                 NULL,          // Dojście do okna nadrzędnego.
                                                 0,             // Flagi.
                                                 &lpSvcAdmin))) // Wskaźnik do interfejsu IMsgServiceAdmin.
    {
        cout<<"Błąd dostępu do interfejsu IMsgServiceAdmin.";
        goto error;
    }

    // Utworzenie nowej usługi informacyjnej programu Exchange.

    if (FAILED(hRes = lpSvcAdmin->CreateMsgService("MSEMS",     // Nazwa usługi z pliku MAPISVC.INF.
                                                   NULL,        // Wyświetlenie nazwy usługi.
                                                   NULL,        // Dojście do okna nadrzędnego.
                                                   NULL)))      // Flagi.
    {
        cout<<"Błąd tworzenia usługi informacyjnej programu Exchange.";
        goto error;
    }
        
    // Teraz trzeba uzyskać identyfikator wpisu nowej usługi.
    // Można to wykonać, sięgając do tabeli usług informacyjnych
    // i do wpisu odpowiadającego nowej usłudze.

    if (FAILED(hRes = lpSvcAdmin->GetMsgServiceTable(0,                 // Flagi.
                                                     &lpMsgSvcTable)))  // Wskaźnik do tabeli.
    {
        cout<<"Błąd dostępu do tabeli usług informacyjnych.";
        goto error;
    }

    // Ustawienie ograniczenia dla tabeli kwerend.

    sres.rt = RES_CONTENT;
    sres.res.resContent.ulFuzzyLevel = FL_FULLSTRING;
    sres.res.resContent.ulPropTag = PR_SERVICE_NAME;
    sres.res.resContent.lpProp = &SvcProps;

    SvcProps.ulPropTag = PR_SERVICE_NAME;
    SvcProps.Value.lpszA = "MSEMS";

    // Kwerenda tabeli w celu pobrania wpisu dla nowo utworzonej usługi informacyjnej.

    if (FAILED(hRes = HrQueryAllRows(lpMsgSvcTable,
                                     (LPSPropTagArray)&sptCols,
                                     &sres,
                                     NULL,
                                     0,
                                     &lpSvcRows)))
    {
        cout<<"Błąd kwerendy tabeli dla nowej usługi informacyjnej.";
        goto error;
    }

    // Przygotowanie tablicy SPropValue na właściwości, które mają być konfigurowane.

    // Najpierw nazwa serwera.
    ZeroMemory(&rgval[1], sizeof(SPropValue) );
    rgval[1].ulPropTag = PR_PROFILE_UNRESOLVED_SERVER;
    rgval[1].Value.lpszA = szServer;

    // Następnie nazwa skrzynki pocztowej.
    ZeroMemory(&rgval[0], sizeof(SPropValue) );
    rgval[0].ulPropTag = PR_PROFILE_UNRESOLVED_NAME; 
    rgval[0].Value.lpszA = szMailbox;

    // Konfiguracja usługi informacyjnej z wykorzystaniem powyższych właściwości.

        if (FAILED(hRes = lpSvcAdmin->ConfigureMsgService(
        (LPMAPIUID)lpSvcRows->aRow->lpProps[iSvcUID].Value.bin.lpb, // Identyfikator wejściowy konfigurowanej usługi.
        NULL,                                                       // Dojście do okna nadrzędnego.
        0,                                                          // Flagi.
        2,                                                          // Liczba ustawianych właściwości.
        rgval)))                                                    // Wskaźnik do tablicy SPropValue.
    {
        cout<<"Błąd konfigurowania usługi informacyjnej.";
        goto error;
    }

    goto cleanup;

error:
    cout<<" hRes = 0x"<<hex<<hRes<<dec<<endl;
    return FALSE;

cleanup:
    // Czyszczenie.
    if (lpSvcRows) FreeProws(lpSvcRows);
    if (lpMsgSvcTable) lpMsgSvcTable->Release();
    if (lpSvcAdmin) lpSvcAdmin->Release();
    if (lpProfAdmin) lpProfAdmin->Release();

    MAPIUninitialize();
    return TRUE;

}
				

Przykład

Następujący plik jest udostępniony do pobrania w Centrum pobierania firmy Microsoft:
Profiler.exe
Data wydania: 22 października 2001

Aby uzyskać więcej informacji na temat sposobów pobierania plików Pomocy technicznej firmy Microsoft, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
119591 Jak uzyskać pliki Pomocy technicznej Microsoft w usługach online
Firma Microsoft przeskanowała ten plik w poszukiwaniu wirusów. Firma Microsoft używa najnowszego oprogramowania do wykrywania wirusów dostępnego w chwili publikacji pliku. Plik jest przechowywany na serwerach o podwyższonym poziomie zabezpieczeń, które utrudniają wprowadzanie nieautoryzowanych zmian w pliku. Program Profiler.exe jest prostym przykładem w języku Microsoft Visual C++, ilustrującym opisane wyżej metody od 2 do 5. Plik Profiler.exe zawiera następujące pliki:

Zwiń tę tabelęRozwiń tę tabelę
Nazwa plikuRozmiar
Profiler.dsw1 KB
Profiler.dsp5 KB
Profiler.cpp12 KB

Właściwości

Numer ID artykułu: 306962 - Ostatnia weryfikacja: 26 listopada 2007 - Weryfikacja: 8.2
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Exchange Server 5.5 Standard Edition
  • Microsoft Messaging Application Programming Interface
Słowa kluczowe: 
kbhowto kbdownload kbmsg KB306962

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com