문제

Windows XP SP3 및 Internet Explorer 7에서 Visual Studio 2008을 사용하여 Outlook 2003 추가 기능을 만들려고합니다.

내 추가 기능은 Outlook View Control을 랩핑하는 사용자 정의 양식을 표시하는 사용자 정의 폴더 홈페이지를 사용하고 있습니다.

OVC의 폴더 속성을 설정하려고 할 때마다 'hresult : 0xxxxxxxxx의 예외'설명으로 COM 예외를 얻습니다. 오류 코드는 임의의 숫자이며 매번 다릅니다. Control의 속성에 대한 첫 번째 액세스가 아닙니다. 그 전에 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)..

이는 폴더가 비 Default PST 파일에있는 경우에만 발생합니다. 기본 PST 파일 내부의 폴더로 변경하면 예외가 발생하지 않습니다.

나는 휴가에 가기 전에 모든 것이 잘 작동한다는 것을 강조해야합니다. :). Windows XP는 내가 결석 한 동안 Internet Explorer 또는 Outlook 2003의 기본 보안을 변경 한 일부 업데이트를 설치 한 것으로 보입니다.

Office 2007 및 Internet Explorer 6이있는 다른 (가상 머신)에서는 업데이트없이 모든 것이 잘 작동합니다.

도움이 되었습니까?

해결책

잠시 후, 나는 결국 해결책이 무엇인지 알아냅니다. 외부 스토리지의 이름을 새로운 것으로 변경하십시오.

AddIn을 시작하는 동안 Default가 아닌 PST 파일을로드하고 이름 (PST 파일의 이름이 아니라 루트 폴더의 이름)을 "문서"로 변경합니다.

이것은 코드입니다 :

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);
 }

솔루션은 '문서'를 더 이상 이름으로 사용하는 것이 아니라 새로운 것을 사용하는 것입니다. 문제는 특정 이름과 관련이 없습니다.

다른 팁

Dobri Dan, ency :)

여기에 정보가 주어진 "Silver Bullet"솔루션을 실제로 제공 할 수 있는지 모르겠지만 다음은 다음과 같은 몇 가지 아이디어/메모가 있습니다.

과거 몇 가지 프로젝트에서 Outlook과 함께 일한 후, 외부 사용자/프로세스에 대한 액세스를 제공/부여하는 데있어 때때로 재미있는 새라고 말할 수 있습니다. 때로는 사용자가 수동으로 액세스를 확인하거나 로그인해야합니다.

app.Session.Logon() 

어딘가를 돌 보았습니다.

내가 눈치 채는 또 다른 것은 사용입니다 app.ActiveExplorer() 이 기능이 당신이 생각하는 것을 정확하게 반환하고 있는지 확인하십시오. 그것은 그것을 취한다 최고의 사용자의 데스크탑의 창 ... 평소입니다. 그러나 항상 그런 것은 아닙니다 당신이 함께 일하려고하는 창은 더블 체크입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top