2009-04-24 4 views
3

이 방법은 광기에 빠져 있습니다.실행중인 프로세스에 CLR 호스트 삽입 - 가능합니까?

.NET을 통해 확장하려는 실행 파일 (액세스 할 수없는 소스 코드)이 있습니다. 그것은 네이티브 실행 파일이므로이 작업을 수행하려면 CLR 호스트를 삽입해야합니다. 내 기본적인 생각은 .NET 언어 (예 : C#)를 통해 스크립팅과 같은 기능을 제공하고 스크립트가 조작 할 수 있도록 대상 실행 파일에 후크를 제공하며 반대의 경우도 마찬가지입니다.

DLL 삽입, 일부 런타임 ASM 삽입 등 다양한 기술을 사용해야한다는 것을 알고 있습니다. 그러나 제가 알고 싶은 것은 이것이 제가 말하는 것입니다. 더 나은 여전히 ​​- 전에 이런 짓을 한 사람 있습니까?

+0

나는 이것을 해 본 적이 없지만, 당신이 올바른 길을 가고 있다고 생각합니다. CLR 호스팅 API를 사용하여 일을 시작하고 실행하는 DLL을 삽입하십시오. 네이티브 DLL은 필요한 곳에서 모든 후크를 처리해야하지만 실제 작업을 위해 호스팅 된 CLR 라이브러리로 호출 할 수없는 이유가 없어야합니다. –

답변

2

네이티브 실행 파일이 COM 개체를 사용할 수 있으면 COM interop을 사용하여이 작업을 수행 할 수 있습니다. interop에 .NET 어셈블리를 등록하면 네이티브 실행 파일은 "일반"COM 개체와 마찬가지로 .NET 클래스를 사용할 수 있으며 첫 번째 COM 개체가 만들어지면 네이티브 프로세스 내에서 CLR이 회전합니다. Similary 네이티브 실행 파일에서 COM 개체를 노출 할 수 있다면 interop 어셈블리를 만들면 .NET 코드에서 사용할 수 있습니다 (또는 IDispatch 만 사용하는 경우 형식 라이브러리 없이도 가능).

기본 사항은 간단하지만 표면을 긁어 모으고 있습니다. 이처럼 심각한 프로젝트의 경우 심각한 참조가 필요합니다. Adam Nathan이 (가) 매우 권장하는 .NET and COM, The Complete Interoperability Guide입니다. 별로 알려지지 않은 큰 책이며, .NET 및 COM 클래스를 디자인 할 때 많은 정보를 제공하여 깨끗하게 정리할 수 있습니다. 또한 네이티브 앱에서 CLR을 직접 호스팅하는 방법에 대해서도 설명하지만이 옵션은 소스 코드에 액세스하지 않으면 실용적이지 않을 수 있습니다. 분명히 COM interop route로 시작하고 다른 옵션이없는 경우 CLR 만 기본적으로 호스팅합니다.

+0

고마워요. 불행히도 제가 생각한 목표 실행 파일은 COM 가능하지 않습니다. = \ 여전히 제공 한 참조를 살펴볼 것입니다. 다시 한번 감사드립니다. =) –

1

우리는 실제로 자동화 프레임 워크에서 매우 유사한 작업을 수행합니다. CodePlex의 EasyHook 프로젝트를 살펴볼 수 있습니다. 그 프로세스 간 통신을 위해 내장 된 IPC Communicator를 포함하여 다양한 기능을 제공합니다. 약간의 다리 작업이 필요했지만 찾고있는 것을 정확히해야합니다.

관련 문제