C# 응용 프로그램에서 inproc COM 서버 구성 요소로 COM interop에 문제가 있습니다.디버거에서만 작동하는 C#/COM interop
나는이 문제를 간단한 C# 테스트 프로그램으로 줄였습니다. 서버 구성 요소의 interop 클래스를 인스턴스화하고 인스턴스의 문자열 속성 값을 설정 한 다음 다른 문자열 속성을 설정합니다. 나는 마샬링과 함께 특별한 일을하지 않을 것이다. COM 구성 요소에 대한 참조를 추가 할 때 생성 된 interop 클래스를 사용하면됩니다. 뭔가 같은 :
using MyLib; // Interop assy
// ...
MyComp comp = new MyComp();
comp.Prop1 = "abc";
comp.Prop2 = "xyz";
성과 : 다음 VS 외부 테스트 프로그램을 실행하면 두 번째 속성이 설정되어있는 경우
가, 내가 지속적으로
0x80010105
의 HRESULT로 (RPC_E_SERVERFAULT
을)를 COMException를 얻을 수 .Visual Studio 2005에서 테스트 프로그램을 실행하면 일관되게 올바르게 작동합니다.
내가 관리되지 않는 C에 해당하는 코드 ++ (NO ATL, 그냥 일반 인터페이스 포인터)를 쓴이와 VS.에서 모두 제대로 작동
내 질문 : 내가보고있는 것을 설명하는 디버거 내부에서 실행할 때 interop가 발생하는 환경과 다른 점은 무엇입니까? 나는 E_RPC_SERVERFAULT
이 interop marshaller에 의해 생성되고 있다고 가정하지만 디버거에서만 왜 그런가? 이 작업을 진행하는 방법에 대한 제안이 있으십니까?
[내 질문은 디버거에서보고있는 다른 동작에 관한 것이므로 com 구성 요소에 대해서는 많이 언급하지 않았습니다. com 구성 요소는 잘 테스트되었으며 7 년 이상 (서버 환경에서 하루에 수천 건의 호출) 프로덕션 환경에서 사용되었으므로 상당히 확신합니다. 그것의 32 비트 dll. 소스가 있지만 현재 적절한 빌드 환경이 없습니다. 비록 내가 그랬다 할지라도, 관리 코드에서 어떻게 디버깅 할 지 모르겠습니다. 이 가능]
UPDATE
아직 솔루션,하지만 좀 더 관찰 : 나는, 또한 UAC로 관리자 권한으로 응용 프로그램을 실행하려고
- 가 꺼져. 같은 결과.
- 오류가 발생하기 전에 프로세스에 연결을 시도했지만 출력 창에 구조적 예외가 표시되지 않습니다.
- 테스트 응용 프로그램의 주 스레드에 대한 아파트 모델을 STA 및 MTA로 명시 적으로 설정하려고했지만 차이점이 없습니다. COM 구성 요소는 스레드 스레드입니다.
- Win2003 시스템과 다른 Win7 프로 시스템에서 관리되는 테스트 응용 프로그램 (Visual Studio 외부)을 실행 해 보았습니다. 그것은 둘 다 올바르게 작동했습니다.
마지막 항목은 내 컴퓨터 문제를 나타내지 만 무엇이 확실하지 않습니다.
[환경은 Visual Studio 2005 Pro와 함께 Win7 Pro 32 비트에서 실행되는 Framework 2.0입니다.]
우연히 관리자 권한으로 Visual Studio를 실행합니까? UAC/사용 권한 문제 일 수 있습니다. – BrokenGlass
out-of-process * COM 서버와 관련이있는 오류입니다. 그것은 설명 할 여지가 거의 없습니다. 디버거가없는 패들도 없습니다. 시작한 후에 디버거를 연결하십시오. –
@BrokenGlass 좋은 생각. 나는 관리자로서 VS2005를 실행 중이다. 좋지 않아, 나도 알아,하지만 나는 Win7에있어. 지금 집에 있고 vpn에서 내 개발자 상자가 다운 된 것 같습니다. 그래서 아침에 관리자 명령 창에서 테스트를 실행 해 보겠습니다. 감사! –