2009-12-08 3 views
2

C# Visual Studio 2008 프로젝트가 있고 COM interop XXXXLib (XXXX.dll)을 사용하고 싶습니다..NET의 COM Interop

물론 % windir % \ system32 \ xxxx.dll에 대한 참조를 추가해야합니다. VS가 Interop.xxxx.dll을 프로젝트 폴더에 추가하면 이제는이 200KB 라이브러리를 간단한 4KB 응용 프로그램.

그러나 이제는 PC에 XXXXLib이 없거나 사용하고 싶지 않습니다. 그리고 내 응용 프로그램에서 .NET은 클라이언트에 COM이 있는지 확인해야합니다.

클라이언트의 PC에 COM이 없으면 내 응용 프로그램이 실패하지 않기를 바랍니다. Interop을 참조 할 필요가 없으며 interop.xxxx.dll 또는 다른 솔루션을로드하기 위해 리플렉션을 사용할 필요가 있다고 생각합니다.

다른 보조 문제는 클라이언트 컴퓨터에 COM이 있는지 어떻게 확인합니까?

좋은 샘플 코드가 있습니까?

저는 전문가를 요청합니다. 최선의 해결책을 위해 저는 전문가에게 모든 사랑을 전하겠습니다.

+6

당신은 약간의 사랑을 유지하고 이전 질문에 대해 전문가로서 대답을 선택할 수 있습니다. –

답변

1

Visual Studio에서 생성 된 코드를 사용하는 대신 (항상 실행될 수 있음) 자신의 코드에서 조건부로 동일한 작업을 수행해야합니다. 코드를 변환하여 그렇게하십시오.

클라이언트 컴퓨터에 3 개의 다른 COM 구성 요소 (COM3 구성 요소 중 하나) 만 설치하면됩니다 (mass spectrometry 데이터와 함께 사용하기 위해 스펙트럼 표시를위한 COM 구성 요소).

내가 근처 here을 발견 할 수 있습니다 사용하는 코드는 ... "스펙트럼 컨트롤을 추가,하지만 한 해당". addSpectrumControl() 함수는 here입니다.

당신은 시도 - catch 블록에서 COM 구성 요소의 인스턴스를 생성에 대한 호출을 래핑하여 클라이언트 컴퓨터에 설치된 COM 구성 요소의 존재를 확인할 수 있습니다. 실패하면 예외가 throw되어 이 catch 블록에 catch됩니다. 그런 다음 이 설치되어 있지 않거나 등록되지 않았거나 다른 오류가 있음을 알 수 있습니다. 어떤 경우에는 사용할 수 없다는 것을 알게됩니다.

+0

나는 그 해결책을 분명히 볼 수있다. 만약 theCOM이 클라이언트 컴퓨터에 설치되지 않았다면 포장의 어떤 참고 문헌도 실패한다. '??? 안부 –

+0

@alhambra Eidos Kiquenet : 나는 이것을 올바르게 이해하는지 모르겠다.하지만 이것은 클라이언트 컴퓨터에서 설치시가 아니라 컴파일 타임에 참조와 관련이 있다고 생각한다. @ALL : 누군가 도와 줄 수 있습니까? –

0

귀하의 응용 프로그램과 함께 해당 DLL을 배포해야합니다, 필요한 경우 제대로 등록해야합니다. dll을 사용하지 않고도 dll없이로드 할 수 있고 실패 할 경우 실행을 계속할 수 있습니다. 그렇지 않다면 앱과 함께 설치해야합니다.

+0

고맙습니다. 모든 클라이언트 PC의 경우 xxxx.dll (권한 액세스 등)을 등록 할 수 없으며 해당 PC의 경우 xxxx.dll 없이도 내 응용 프로그램이 작동해야합니다. 개발 환경에서 내 csproj에서 참조를 추가하는 경우 해당 PC의 실행 환경에서 내 앱이 실패합니다. xxxx.dll을 사용하고 xxxx.dll을 사용하지 않고 클라이언트에 COm이 있는지 확인하고이 경우 xxxx.dll을 사용하여 유연성이 필요합니다. 존재하지 않으면 내 응용 프로그램은 xxxx.dll없이 작동합니다. –

0

가장 좋은 해결책은 xxxx.dll을 배포 패키지에 추가하고 함께 사용하는 것입니다.

이 당신에게 괜찮 접근하는 경우 - 설치 프로그램을 만들기 위해 wix을 시도 할 수 있습니다.

+0

고맙습니다. 모든 클라이언트 PC의 경우 xxxx.dll (권한 액세스 등)을 등록 할 수 없으며 해당 PC의 경우 xxxx.dll 없이도 내 응용 프로그램이 작동해야합니다.개발 환경에서 내 csproj에서 참조를 추가하는 경우 해당 PC의 실행 환경에서 내 앱이 실패합니다. –