4

Windows XP SP3 および Internet Explorer 7 で Visual Studio 2008 を使用して Outlook 2003 アドインを作成しようとしています。

私のアドインは、Outlook ビュー コントロールをラップするカスタム フォームを表示するカスタム フォルダ ホーム ページを使用しています。

OVC の Folder プロパティを設定しようとすると、毎回「HRESULT からの例外: 0xXXXXXXXX」という記述で COM 例外が発生します。エラーコードは乱数で、毎回異なります。コントロールのプロパティへの最初のアクセスではありません。その前に、View および ViewXML プロパティが既に設定されています。コントロールは、スクリプトを実行しても安全であるとマークされています。

アクティブなエクスプローラーの CurrentFolder.FolderPath プロパティの値を使用していますが、これは正しいようです。

Outlook.Explorer currentExplorer = app.ActiveExplorer();
        if (currentExplorer != null)
        {
            ovcWrapper.Folder = currentExplorer.CurrentFolder.FolderPath;
        }

これはスタック トレースの先頭です。

System.Runtime.InteropServices.COMException (0xXXXXXXXX): Exception from HRESULT: 0xXXXXXXXX
at Microsoft.Office.Interop.OutlookViewCtl.ViewCtlClass.set_Folder(String pVal)
at AxMicrosoft.Office.Interop.OutlookViewCtl.AxViewCtl.set_Folder(String value)..

これは、フォルダがデフォルト以外の PST ファイルにある場合にのみ発生します。デフォルトの PST ファイル内のフォルダーに変更しても、例外は発生しません。

私は休暇に行く前にすべてがうまくいったことを強調しなければなりません:)。Windows XP は、不在中に Internet Explorer または Outlook 2003 の既定のセキュリティを変更する更新プログラムをインストールしたようです。

Office 2007 と Internet Explorer 6 を使用するもう 1 つの (仮想マシン) では、更新を行わなくても、すべて正常に動作しています。

4

2 に答える 2

2

しばらくして、ようやく解決策がわかりました。外部ストレージの名前を新しいものに変更しました。

アドインの起動時に、既定以外の PST ファイルが読み込まれ、その名前 (pst ファイルの名前ではなく、ルート フォルダーの名前) が "Documents" に変更されます。

これはコードです:

session.AddStore("C:\\test.pst"); // loads existing or creates a new one, if there is none.
storage = session.Folders.GetLast(); // grabs root folder of the new fileStorage.

if (storage.Name != storageName) // if fileStorage is brand new, it has default name.
{
      storage.Name = "Documents";
      session.RemoveStore(storage); // to apply new fileStorage name, it have to be removed and added again.
      session.AddStore(storagePath);
 }

解決策は、「ドキュメント」を名前として使用するのではなく、新しいものを使用することです。問題は特定の名前には関係ありません。

于 2008-10-01T14:55:35.060 に答える
1

Dobri Dan, nency :)

ここにある情報を踏まえて、本当に「特効薬」ソリューションを提供できるかどうかはわかりませんが、試してみるべきいくつかのアイデア/メモを次に示します

。以前は、外部のユーザー/プロセスへのアクセスを許可/許可することに関しては、時々おかしな鳥だったと言えます。ユーザーが手動でアクセスを確認したりログインしたりする必要がある場合があります...そのため、次のことを確認してください

app.Session.Logon() 

どこかでお世話になっています。

私が気付いたもう1つのことは、app.ActiveExplorer() この関数があなたが思っているものとまったく同じものを返すことを確認してください;の使用です。ユーザーのデスクトップの一番上のウィンドウを使用します...通常はyyですが、常に作業しようとしているウィンドウとは限らないため、再確認してください。

于 2008-09-26T14:38:52.567 に答える