2011-03-01 3 views
1

저는 Com 객체를 사용하고 있습니다. com 서버는 특정 계정으로 실행되는 Windows 서비스에서 사용해야합니다. 그러나이 계정에서 실행할 때 com을로드 할 수 없으므로 다음 예외가 발생합니다. IClassFactory에서 CLSID {36998A63-857C-4B87-BC5E-72B7B3573F80}로 COM 구성 요소의 인스턴스를 만드는 중 오류가 발생했습니다 : 80010105LocalSystem의 Com 클래스 사용

계정을 LocalSystem으로 변경하려고 시도했지만 여전히 실패하지만 내 Windows 계정으로 로그온하도록 Windows 서비스가 변경됩니다.

내 계정에 설치된 com 서버와 관련이 있다고 생각합니다. "it 's name.exe/regserver"를 사용하여 com을 설치합니다. LocalSystem으로 명령을 실행하려고 시도한 다음 어설 션으로 실패합니다. 코드가 없으므로 문제가있는 곳을 알지 못합니다. 확인해야하는 권한이 있습니까? Visual Studio에서 embed interop 유형을 전환 해 보았습니다.

어떤 도움이 필요합니까?

+0

DCOM 구성으로 활성화 권한을 설정 했습니까? – sharptooth

+0

안녕하세요 sharptooth. 그게 뭔지는 모르겠지만 아마도 그렇지는 않습니다. – Karsten

+0

DCOMCNFG.EXE를 시작했는데 찾을 수 없었지만 그럴 수 없었습니다. – Karsten

답변

3

표시되는 오류는 RPC_E_SERVERFAULT입니다. 즉, out-of-process COM 서버에서 처리되지 않은 Win32 예외 (예 : 액세스 위반)가 발생했음을 의미합니다. COM 서버에 대한 소스 코드 나 디버그 기호가 없으면 직접 진단하거나 직접 수정할 수 없습니다. (편집 : 그것은 64 비트 머신 :-)의 "비트 수"의 불일치와 같은 명백한 뭔가하지 않는 한)

옵션 : 당신이 에게 서버를 활성화하고 소비 할 수 있어야한다고 경우

  • 는 COM 개체를 서비스 계정과 관련하여 사용하려면 서버를 가져와 서버의 공급 업체와 연결하고 진단을 받고 을 수정해야합니다.
  • 대신 사용자의 ID로 ("시작하는 사용자"입니다) 디폴트의 을 실행하기 위해 COM 서버 를 구성하는 DCOMCNFG.EXE (신원 탭)를 사용하고, (이것은 오류있는 문제를 피할 수 있는지를 볼 수 있습니다 당신이 말한 것에서 나오는 소리).
+0

사실 문제의 권한이 부족하기 때문에 프로세스 모니터를 사용하여 문제를 진단 할 수 있습니다. – sharptooth

+0

@sharptooth : 내가 틀릴 수도 있습니다 (공식적인 Microsoft 설명서는 없습니다). 그러나 제 경험상 RPC_E_SERVERFAULT는 일반적으로 액세스 위반이나 0으로 나누는 오류와 같은 서버 구현에서보다 근본적인 문제를 나타냅니다. 필요한 사용 권한이 부족하면 일반적으로 E_ACCESSDENIED (0x80070005)의 HRESULT로 표시됩니다. 꼭 Process Monitor가 당신에게 어떤 것을 말할 수 있는지를 보아라. 그러나 나는 당신이 무엇을 찾고 있는지 확실하지 않다. –

+0

...또는 "bitness"의 불일치 : –

2

친구의 Hans Passant (Microsoft 뉴스 그룹 스레드)에서 방금 발견했습니다. 그것은 매우 훌륭하고 적절합니다. 한스가 그것을 인용하는 것을 꺼려하지 않기를 바랍니다.

Ah, the dreaded RPC_E_SERVERFAULT. RPC installs an SEH handler in the stub that catches any SEH exception the occurs in the COM server. Even the really bad ones like AV. The client is notified about the exception with 0x80010105. Which is awful, there's no way to get any information whatsoever about the exception. Even worse, the server just keeps running, now typically with a radically messed up internal state due to the exception. There's nothing you can do about it but trying to debug the COM server to find out why it is throwing exceptions. If it is a black box to you, you'll have a heck of a time without support from the COM component vendor.