Outlook에서 기존 메일 메시지를 여는 응용 프로그램을 구축하고 있습니다. 사용자가 이미 Outlook을 실행하고 있거나하지 않을 수 있습니다. Outlook이 실행되고 있지 않으면 모두 제대로 작동하지만 이미 실행중인 경우 COM 오류 (80080005)가 표시됩니다. 인터넷은 기존 Outlook 프로세스가 바인드하려고하는 응용 프로그램보다 높은 권한 수준으로 실행되고있는 경우 이러한 상황이 발생할 수 있음을 나타냅니다.기존 Outlook 프로세스에 연결
메시지를 여는 데 Outlook에 다른 방법이 있습니까? 아니면 권한 수준과 일치하는지 확인해야합니까?
감사합니다,
-Patrick
편집 스택 오버플로가 의견 의미있는 형식을 허용하지 않는 한, 원래의 질문에 코드를 추가.
var outlook = new Outlook.Application();
그 라인은 내가 내 응용 프로그램을 시작하기 전에 Outlook을 발사 한 경우를 제외하고 모든 경우에 작동합니다
원래는 다음을 수행했다. 이 경우 앞에서 설명한 80080005 오류 코드가 표시됩니다.
나는이로 변경했습니다 좀 더 COM 노골적인 :
Application outlook;
try
{
outlook = (Application)Marshal.GetActiveObject("Outlook.Application");
}
catch (COMException ex)
{
if (ex.ErrorCode == -2147221021)
outlook = new ApplicationClass();
else
throw;
}
그러나, 그 코드는 여전히 꽤 작업을 수행합니다 - 아웃룩 누구의 ErrorCode가 0x800401E3 (인 예외를, 내가 트랩을 실행하는 경우 MK_E_UNAVAILABLE). 그러나 새로운 ApplicationClass 객체를 만들려고해도 여전히 동일한 80080005 오류 코드가 발생합니다.
나는 또한 대신new ApplicationClass()
라인의 catch 블록에 다음 퍼팅 시도했지만,이 행동에 차이 없습니다
:
outlook = (Application) Activator.CreateInstance(
Type.GetTypeFromProgID("Outlook.Application"));
저는 C# interop lib 호출 (new Application() 등)을 사용하고 있습니다. GetObject() 포인터에 감사드립니다. –
Outlook은 GetObject ("", "Outlook.Application")가 아직 실행 중이 아니며 오류를 반환하지 않을 경우 세션을 시작한다는 점에서 다소 이상합니다. – Fionnuala
@Remou : 나는 그것을 몰랐다. 좋은 정보, 고마워. –