2010-09-07 18 views
1

舊問題: 我有一個帶有IL(.NET)代碼的.exe(PE)。 當它啓動時,會調用mscorlib.dll(.NET框架)函數來啓動IL代碼。 我可以提取.NET代碼段並將其附加到其他程序(調用mscorlib.dll來執行該段)嗎?可以從本機Win32程序調用.NET VM(mscorlib)來執行IL /其他內部編譯代碼格式嗎?

新問題:

我想從C#.NET程序的編譯代碼追加到可以在沒有任何.NET運行庫運行一個人,純粹的Win32應用程序,並通過動態調用mscorlib.dll中的執行它函數,如果.NET存在。這就像'可執行的木匠'技術,而不是本地編譯。

我不想寫一些.NET .exe到臨時目錄並執行它;它已經完成了,現在想通過直接在我的文件中的.NET代碼上調用.NET vm來刪除臨時文件夾(通過發出已找到的結構/會話的偏移量,或者僅通過分配正確的PE .section名稱 - 只知道一點關於PortableExecutable格式)。

參考:http://webcache.googleusercontent.com/search?q=cache:u9tTX2sfkhAJ:social.msdn.microsoft.com/Forums/en/clr/thread/2677c0b6-6b3c-4a51-9fcc-c2d8838c7b8b+compiled+IL

+0

更好地記錄你的問題,它*非常*不清楚。 – 2010-09-07 18:04:09

+0

我認爲需要更多細節。我的理解是,你有一個主要是本地代碼但有一些IL的程序。您希望延遲啓動框架以提高本地程序的啓動速度,並認爲您可以通過將IL提取到其自己的程序集並動態調用它來實現此目的。它是否正確? – KeithS 2010-09-07 18:04:27

+0

不是。它是純粹的IL,本地代碼只是對.NET加載器的引用。如果「另一個程序」無法找到它自己的框架DLL,我想提取IL,將它附加到另一個Win32 native程序中,作爲Win32 PE段並讓.NET執行它。 – 2010-09-07 18:06:48

回答

1

也許你正在尋找一個鏈接,將您的.NET庫和引用程序,並創建一個可執行文件或.dll文件,可以無需.NET運行被安裝。此

兩個商業選項

應該也可以用mono。它有一個名爲mkbundle的實用程序,它可以預編譯和添加依賴項,但是您需要Cygwin和更多專業知識才能使其運行。這個問題似乎是一個好的開始:How to convert a simple .Net console project a into portable exe with Mono and mkbundle?

+0

嗯。例如,我有一個.net「hello world」和另一個.exe程序,例如,一個硬盤驅動器查殺病毒。如果該病毒發現.NET安裝,它就會運行helloworld,如果沒有 - 本地病毒代碼會殺死5000米範圍內的任何東西。通過鏈接器,我只會得到第三個應用程序,與此想法沒有任何共同之處 - 它可能有它是自己的VM,無論如何。但是,將檢查原則;謝謝! – 2010-10-10 15:16:01

0

雖然VS沒有明確支持這一點,.NET允許你引用一個.exe裝配JST以同樣的方式,你會一個.dll組件,並調用公共類。

當然,如果您需要調用的代碼是私人或內部代碼,您可能不得不採取反思的方式來使其運行。

如果您確實需要將代碼移入.dll,您可以嘗試ILMerge來創建一個二進制文件。但是,我還沒有嘗試使用ILMerge以及引用另一個.exe程序集的程序集。

1

您可以承載在一個C++應用程序的CLR的運行時,然後調用在託管環境的方法

傑夫里氏有例子

+0

在哪本書?亞馬遜有Richter和Templeman的「CLR Via C++/CLI」。 – 2010-10-06 00:42:46

+1

CLR via C#..... – pm100 2010-10-06 00:54:04

+1

page 524 ....... – pm100 2010-10-06 01:57:17

相關問題