2011-02-09 4 views
2

레거시 COM 구성 요소를 등록 할 필요가 없도록 reg-free com을 사용하고 싶습니다. 그러나, 나는 com dll을 클라이언트 exe 디렉토리 아래에 있지 않은 위치에 둘 수 있기를 바란다. .... \ lib. 상대 경로 나 절대 경로를 허용하지 않으므로 서버 매니페스트 파일에서이 작업을 수행 할 수 없습니다.Reg-free COM - 클라이언트 exe와 관련된 COM dll의 위치

이 방법이 있다면 누구에게 알 수 있습니까?


UPDATE : 이 난 단지 XP에서 작동하는 상대 경로를 발견했다. 그러나 Activation Context API를 사용하여 Windows Server 2008에서 절대 경로를 사용할 수 있습니다. 이제 내 문제는 내 COM 구성 요소가 관리되는 데이터베이스 드라이버에 정적 종속성이 있지만 현재 찾지 못하고 있다는 것입니다. 내가 매니페스트 파일에 대해 읽은 내용에서 COM dll과 동일한 디렉토리에있는 것처럼이 DLL을 가리키는 COM 등록없는 매니페스트에 다른 요소를 추가 할 수 있기를 기대했지만 작동시키지 못했습니다. 요약하자면, Activation Context API를 사용하여 COM manifest/dll을 다른 디렉토리 (exe 디렉토리의 하위 디렉토리가 아닌)에서 참조하고 올바르게로드하는 하나의 디렉토리에 exe를 가지고 있습니다. 하지만 나는 또한 COM dll과 같은 디렉토리에 관리되는 데이터베이스 드라이버 dll을 가지고 있으며 가능한 경우 매니페스트 파일을 사용하여이 파일을로드 할 수있는 방법을 알고 싶습니다.

+0

그냥 추가하려면 - 활성화 컨텍스트 api도 사용하려고했습니다. 위에서 설명한 것처럼 내 클라이언트가 client.exe와 같은 디렉터리에없는 COM dll을로드하도록합니다. 필자는 매니페스트 파일과 COM dll을 포함하는 디렉토리를 가리 키도록 활성화 컨텍스트의 어셈블리 디렉토리를 설정하여이 작업을 시도했습니다. 그 결과 매니페스트 파일이 올바르게 발견되지만 첨부 된 dll을로드하려고하면 매니페스트를 찾은 디렉토리가 아닌 client.exe에 상대적인 경로를 찾습니다. 내가 놓친 게 있니? – HammerIp

+0

상대 경로가 작동합니다. 즉, dll을 exe에 상대적으로'. \ External' 폴더에 넣을 수 있습니다. 매니페스트에서''을 사용하십시오. – wqw

+0

나는 그것이 상대적이라고 생각하지만, 같은 또는 더 낮은 디렉토리 레벨에서만 작동합니다. – Jeff

답변

3

나는 현재 디렉토리로 부모 디렉토리를 가진 exe를 달려서 이것을 달성했다. 즉,이 폴더 구조

  • parentdir/
  • parentdir/MyApp를/
  • parentdir/somedependency/현재 디렉토리로 "parentdir"와 다음

에, 당신은 당신의 EXE 파일을 실행할 수 있습니다 ". \ myapp \ myapp.exe" 및 myapp.exe.manifest는 "somedependency"에 대한 참조를

와 같이 포함 할 수 있습니다.

이것은 Windows 서버에서 작동합니다

+0

클라이언트가 서버를 상대적으로 참조하도록 예제 .manifest를 표시 할 수 있습니까? – Measuring

관련 문제