0

メール/メッセージを送信するための MAPI プロファイルを作成するアプリケーションがあります。Outlook2007 環境ではプロファイルが正しく作成されていますが、Outlook2007 SP2 環境ではプロファイルが正しく作成されていません。ソースコードも「MAPI/outlookプロファイルの交換環境」も同じです。プロファイルは、MAPI サブシステムを使用して作成されます。

アプリケーションについての説明: アプリケーションは、Windows サービス ベースのアプリケーションです。サービスは、COM アプリケーションを実行します。COM アプリケーションは新しいスレッドを生成して新しいプロファイルを作成し、サンプル メッセージを送信します。

実際の問題: プロファイルの作成中に、ConfigureMsgService 関数 (IMsgServiceAdmin に属する) の呼び出しが、S_OK を返しても正しく機能しません。ConfigureMsgService 関数の第 5 パラメーター「lpProps」の値は次のとおりです。

    // 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 関数呼び出しの前に、MAPIInitialize、MAPIAdminProfiles、CreateProfile、AdminServices、CreateMsgService、GetMsgServiceTable などの他のすべての MAPI 呼び出しが成功することにも注意してください。

私の質問ですが、同じコードが Outlook 2007 環境では正常に動作していましたが、Outlook 2007 SP2 環境では失敗しました。

1. スタンドアロン アプリケーションから同じコードを実行すると、正常に動作しました。2. サービスがローカル システム アカウントまたはネットワーク サービス アカウントとして実行されている場合、コードは正しく機能しませんでした。

  1. 何が問題なのですか?私は何かが欠けていますか?
  2. 回避策はありますか?

よろしくお願いします

4

2 に答える 2

0

お返事をありがとうございます。

私はあなたのアイデアを試しましたが、うまくいきませんでした。この場合、私はマイクロソフトに話しました、彼らはこの問題の修正を提供しました(http://support.microsoft.com/kb/972363)、それはそれを修正しました。

サラバナン

于 2011-01-04T12:17:02.277 に答える
0

あなたの問題はあなたのメモの#2にあります:

注意してください。1。スタンドアロンアプリケーションから同じコードを実行すると、正常に機能しました。2.サービスがローカルシステムアカウントまたはネットワークサービスアカウントとして実行されている場合、コードは正しく機能しませんでした。

MAPIプロファイルは、レジストリの現在のユーザーのハイブ*(HKEY_CURRENT_USERおよびHKEY_USERS {ユーザーSID})に保存されます。システムアカウント(LocalSystemおよびNetworkService)は、MAPIがプロファイル情報を書き込むために必要なユーザーハイブを提示しません。

最も簡単な修正は、サービスとしてログオンする権限が付与されているユーザーアカウントでサービスを実行することです。COMアプリの実行方法(proc内とproc外)によっては、システムアカウントではなく、特定のユーザーとして実行できる場合があります。

*ハイブは、レジストリのさまざまなセクションに使用される用語です。ここでは、レジストリのユーザー自身のセクションを扱っています。

于 2010-12-31T02:34:12.030 に答える