2009-04-24 38 views
3

這就是瘋狂,我知道。將CLR主機注入正在運行的進程 - 可能嗎?

我有一個可執行的(源代碼以我不具有訪問權限),我想通過.NET延伸。這是一個本地可執行文件,所以我需要注入一個CLR主機來執行此操作。我的基本想法是通過.NET語言(例如C#)提供類似於腳本的功能,併爲目標可執行文件提供鉤子以供腳本操作,反之亦然。

我知道我需要使用各種技術來實現這一點 - DLL注入,一些運行ASM注射等,但我想知道的是:就是我說的可能嗎?更好 - 有人曾經做過這樣的事情嗎?

+0

我從來沒有這樣做,但我認爲你是在正確的道路上。注入一個使用CLR託管API的DLL來啓動和運行。你的本地DLL將不得不處理你所需要的所有鉤子,但是不應該有一個理由,它不能調用你的託管CLR庫來進行真正的工作。 – 2009-04-24 20:18:20

回答

2

爲此,您可以使用COM互操作,如果你的本地可執行程序能夠使用COM對象。如果你註冊.NET程序集進行互操作,那麼你的本地可執行文件就可以像使用「普通」COM對象一樣使用你的.NET類,並且當第一個被創建時,它將在本地進程中啓動CLR。如果您可以從本機可執行文件公開COM對象,那麼您可以使用它們從.NET代碼中創建互操作程序集(甚至沒有類型庫,如果僅使用IDispatch),就可以使用它們。

的基礎是簡單,但我只是皮毛 - 對於這樣一個嚴重的項目,你需要認真參考。我強烈推薦Adam Nathan的.NET and COM, The Complete Interoperability Guide。這是一本很大的書,並沒有留下太多的不足之處,而且它還有很多關於設計.NET和COM類來乾淨地交互的很好的信息。它還解釋瞭如何直接在本地應用程序中託管CLR,但是如果沒有訪問源代碼,該選項可能不實用。我肯定會開始使用COM互操作路由,並且只有本地託管CLR(如果沒有其他選項)。

+0

謝謝 - 雖然不幸的是我記住的目標可執行文件是* not * COM-capable。 = \仍然我會看看你提供的參考 - 再次感謝。 =) – 2009-04-24 23:50:21

1

實際上,我們做一個自動化框架非常類似的東西。您可能需要查看CodePlex上的EasyHook項目。它有很多很棒的功能,包括內置IPC Communicator進行跨進程通信。它需要一點腿部的工作,但應該做你正在尋找的。

相關問題