كيفية إنشاء ملفات تعريف MAPI دون تثبيت Outlook

ملخص

سوء فهم الشائع أن عميل MAPI مثل Microsoft Outlook أو عميل Exchange، يجب تثبيت على Microsoft Exchange Server لإنشاء ملفات تعريف MAPI. تثبيت عميل MAPI لهذا السبب غير ضرورية. ل Outlook، نوصي بتثبيت عميل MAPI لخوادم الإنتاج. ما دام نظام فرعي MAPI مثبت، توجد مجموعة متنوعة من الطرق الأخرى لإنشاء ملفات تعريف MAPI. وفي المقابل النظام فرعي ل MAPI مثبت.

مزيد من المعلومات

طرق إنشاء ملفات تعريف MAPI

تقدم Microsoft أمثلة برمجية للتوضيح فقط، دون أي ضمان صريح أو ضمني. هذا يتضمن، على سبيل المثال لا الحصر، الضمانات الضمنية الخاصة بالتسويق أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي يتم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يساعد مهندسو الدعم لدى Microsoft في شرح وظيفة إجراء محدد، لكنهم لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات تستوفي متطلبات محددة.

قبل أن تحاول أية طريقة من هذه الطرق، يجب عليك التأكد من إجراء تصحيح الإدخالات في الملف Mapisvc.inf الموجود على الملقم.
لمزيد من المعلومات حول كيفية تعديل هذا الملف، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

كيفية إضافة إدخالات لخدمات Exchange إلى Mapisvc.inf 294470

استخدام NewProf.exe

الأداة المساعدة NewProf.exe تم تضمينه مع Outlook. لمزيد من المعلومات حول كيفية استخدام هذه الأداة المساعدة، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:لمزيد من المعلومات، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة معارف Microsoft":

خيارات سطر الأوامر Newprof.exe 145905

وصف ملف التعريف واصف 148664

استخدام نموذج ProfMan2

يستخدم هذا النموذج الواجهة MAPI إيبروفادمين المذكورة في قسم "استخدام الواجهة MAPI إيبروفادمين". للحصول على هذا النموذج، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
228736 Profman2.exe-MAPI v2.0 إدارة ملف التعريف

استخدم الدالة MAPILogonEx

عند استدعاء دالة MAPILogonEx دون تحديد ملف تعريف وتحديد العلامة MAPI_LOGON_UI، يعرض معالج إنشاء ملف تعريف MAPI إذا لم ملفات موجودة على الكمبيوتر. في حالة وجود ملفات تعريف، MAPI يعرض مربع الحوار اختيار ملف تعريف . انقر فوق جديد لبدء تشغيل معالج إنشاء ملف التعريف.
نموذج لتعليمة برمجية
// CreateProfileWithMAPILogonEx function: This takes advantage of the // profile prompt dialog's "New" button.
bool CreateProfileWithMAPILogonEx()
{
HRESULT hRes = S_OK; // Return code from MAPI calls.
LPMAPISESSION lpSession = NULL; // MAPI Session pointer.

// Initialize MAPI.
if (FAILED(hRes = MAPIInitialize(NULL)))
{
cout<<"Error initializing MAPI. hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;
}

// Instruct user to click the "New" button.
cout<<"When the \"Choose Profile\" dialog appears, click the \"New\" button"
<<"to configure a new profile."<<endl;

// Call MAPILogonEx to display the profile chooser dialog box.
if (FAILED(hRes = MAPILogonEx(NULL,
NULL,
NULL,
MAPI_LOGON_UI,
&lpSession)))
{
cout<<"Error logging on. hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;
}

// Log off the session.
if (FAILED(hRes = lpSession->Logoff(0,0,0)))
{
cout<<"Error logging off. hRes = 0x"<<hex<<hRes<<dec<<endl;
}

// Release the session.
lpSession->Release();

// Uninitialize MAPI.
MAPIUninitialize();

// true, which indicates success.
return TRUE;
}

استخدم الدالة لاونتشويزاردينتري

استدعاء هذه الدالة مباشرة معالج إنشاء ملف التعريف.
نموذج لتعليمة برمجية
// CreateProfileWithLAUNCHWIZARD function: This uses the LAUNCHWIZARDENTRY API// to display the profile configuration UI.
bool CreateProfileWithLAUNCHWIZARD()
{
HRESULT hRes = S_OK; // Return code from MAPI calls.
TCHAR szProfName[80] = {0}; // String to hold profile name.
LPTSTR szServices[] = {"MSEMS", NULL}; // String to hold message service names.

// Call LaunchWizard to add the MSEMS service.
if (FAILED(hRes = LaunchWizard(NULL,
NULL,
(LPCTSTR *)szServices,
80,
szProfName)))
{
cout<<"Error launching wizard. hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;
}

// Return true indicating success.
return TRUE;
}

استخدام واجهة إيبروفادمين MAPI

هذه الواجهة MAPI يتيح لك برمجياً إنشاء تشكيل جانبي دون تدخل المستخدم.
نموذج لتعليمة برمجية
// CreateProfileWithIProfAdmin function: This uses the MAPI IProfAdmin to // programmatically create a profile. No UI is displayed.
bool CreateProfileWithIProfAdmin()
{
HRESULT hRes = S_OK; // Result from MAPI calls.
LPPROFADMIN lpProfAdmin = NULL; // Profile Admin object.
LPSERVICEADMIN lpSvcAdmin = NULL; // Service Admin object.
LPMAPITABLE lpMsgSvcTable = NULL; // Table to hold services.
LPSRowSet lpSvcRows = NULL; // Rowset to hold results of table query.
SPropValue rgval[2]; // Property structure to hold values we want to set.
SRestriction sres; // Restriction structure.
SPropValue SvcProps; // Property structure for restriction.
char szProfile[80] = {0}; // String for profile name.
char szMailbox[80] = {0}; // String for mailbox name.
char szServer[80] = {0}; // String for server name.

// This indicates columns we want returned from HrQueryAllRows.
enum {iSvcName, iSvcUID, cptaSvc};
SizedSPropTagArray(cptaSvc,sptCols) = { cptaSvc, PR_SERVICE_NAME, PR_SERVICE_UID };

// Get configuration info from user.
cout<<"Enter name for profile: ";
cin>>szProfile;
cout<<"Enter Exchange mailbox name: ";
cin>>szMailbox;
cout<<"Enter Exchange server name: ";
cin>>szServer;

// Initialize MAPI.

if (FAILED(hRes = MAPIInitialize(NULL)))
{
cout<<"Error initializing MAPI.";
goto error;
}

// Get an IProfAdmin interface.

if (FAILED(hRes = MAPIAdminProfiles(0, // Flags.
&lpProfAdmin))) // Pointer to new IProfAdmin.
{
cout<<"Error getting IProfAdmin interface.";
goto error;
}

// Create a new profile.

if (FAILED(hRes = lpProfAdmin->CreateProfile(szProfile, // Name of new profile.
NULL, // Password for profile.
NULL, // Handle to parent window.
NULL))) // Flags.
{
cout<<"Error creating profile.";
goto error;
}

// Get an IMsgServiceAdmin interface off of the IProfAdmin interface.

if (FAILED(hRes = lpProfAdmin->AdminServices(szProfile, // Profile that we want to modify.
NULL, // Password for that profile.
NULL, // Handle to parent window.
0, // Flags.
&lpSvcAdmin))) // Pointer to new IMsgServiceAdmin.
{
cout<<"Error getting IMsgServiceAdmin interface.";
goto error;
}

// Create the new message service for Exchange.

if (FAILED(hRes = lpSvcAdmin->CreateMsgService("MSEMS", // Name of service from MAPISVC.INF.
NULL, // Display name of service.
NULL, // Handle to parent window.
NULL))) // Flags.
{
cout<<"Error creating Exchange message service.";
goto error;
}

// You now have to obtain the entry id for the new service.
// You can do this by getting the message service table
// and getting the entry that corresponds to the new service.

if (FAILED(hRes = lpSvcAdmin->GetMsgServiceTable(0, // Flags.
&lpMsgSvcTable))) // Pointer to table.
{
cout<<"Error getting Message Service Table.";
goto error;
}

// Set up restriction to query table.

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";

// Query the table to obtain the entry for the newly created message service.

if (FAILED(hRes = HrQueryAllRows(lpMsgSvcTable,
(LPSPropTagArray)&sptCols,
&sres,
NULL,
0,
&lpSvcRows)))
{
cout<<"Error querying table for new message service.";
goto error;
}

// Set up a SPropValue array for the properties that you have to configure.

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

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

// Configure the message service by using the previous properties.

if (FAILED(hRes = lpSvcAdmin->ConfigureMsgService(
(LPMAPIUID)lpSvcRows->aRow->lpProps[iSvcUID].Value.bin.lpb, // Entry ID of service to configure.
NULL, // Handle to parent window.
0, // Flags.
2, // Number of properties we are setting.
rgval))) // Pointer to SPropValue array.
{
cout<<"Error configuring message service.";
goto error;
}

goto cleanup;

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

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

MAPIUninitialize();
return TRUE;

}

نموذج

يتوفر الملف التالي للتنزيل من مركز التنزيل ل Microsoft:
تاريخ الإصدار: 22 تشرين الأول/أكتوبر 2001

لمزيد من المعلومات عن كيفية تنزيل ملفات دعم Microsoft، انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft":
119591 كيفية الحصول على ملفات دعم Microsoft من الخدمات عبر الإنترنت
قامت Microsoft بفحص هذا الملف بحثًا عن الفيروسات. استخدمت Microsoft أحدث برامج الكشف عن الفيروسات التي كانت متوفرة في التاريخ الذي تم نشر الملف فيه. يتم تخزين الملف على خوادم محسنة الأمان تساعد على منع إجراء أية تغييرات غير مصرح بها على الملف.
Profiler.exe هو نموذج Microsoft Visual c + + بسيط يوضح الأساليب من 3 إلى 5 أعلاه. ملف Profiler.exe يحتوي على الملفات التالية:

اسم الملفالحجم
Profiler.dsw1 كيلو بايت
Profiler.dsp5 كيلو بايت
Profiler.cpp12 كيلو بايت
خصائص

رقم الموضوع: 306962 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات