0

ユーザーがボタンをクリックしたときに、Microsoft Outlook を開いてメール アイテムを作成するプログラムを作成しています。ただし、そうすると、次のエラーが表示されます。

CLSID {0006F03A-0000-0000-C000- 000000000046} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80080005 サーバーの実行に失敗しました (HRESULT からの例外: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))。

このエラーを調査した結果、プログラムと MS Outlookの両方を管理者または通常の権限レベルで実行する必要があることがわかりました。

そこで質問です...現在実行中のプログラムと同じ特権レベルを使用して、C# コードから MS Outlook を開くにはどうすればよいですか。現在の特権レベルを取得し、その特権レベルで Outlook を開く必要があります。これまでのところ、これに関する研究はうまくいきませんでした。どんな助けでも大歓迎です!

MS Outlookを開くための(現在の)コードとその使用方法は次のとおりです。

// this will grab the current instance of outlook if it's running or make a new one
// however, it still doesn't have a way to open outlook with specific privileges...
//Application outlookApp = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");
Application outlookApp = new Application();

MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem);
mailItem.Subject = "Blah";
mailItem.HTMLBody= @"Various HTML stuff";

foreach (string documentPath in this.documentPaths)
{
    mailItem.Attachments.Add(documentPath, 1, 1, documentPath);
}

mailItem.Display(true);

編集:コードを変更して、Outlook アプリでも何をしているかを示しました。

4

1 に答える 1

0

Outlook はシングルトンであるため、既に実行されている場合は、既に実行されているインスタンスへのポインターを取得します。

あなたのコードは何をしますか? インプロセスでロードするため、この問題がないライブラリを検討することをお勧めします。CDO 1.21 (デフォルトでは Outlook によってインストールされなくなりました) またはRedemptionのいずれかが機能します。

于 2013-09-30T14:44:47.770 に答える