2012-09-07 36 views
12

我有一個WinForms應用程序,應該很容易用just和.exe文件進行部署。它使用框架2.0,所以默認情況下它不適用於Windows 8。如果我有以下參數.config文件,它工作正常的W8:我可以在.net中指定沒有.config文件的supportedRuntime(或任何其他配置參數)嗎?

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

不過,現在我已經部署兩個文件,這是不能接受的。我能做些什麼來將這些參數「嵌入」到exe文件中?

我已經嘗試使用WinZip自我提取器,但它也不是一個選項,因爲我無法自定義它的接口。

回答

12

.NET可執行文件包含一小段本機代碼,旨在將適當的CLR版本加載到進程中。

加載程序調用墊片(MSCOREE.DLL,.NET可執行文件對該DLL有本機依賴性)加載CLR(第4版中的CLRCreateInstance)。
配置元素<startup>的內容由墊片處理。

這意味着,您無法在託管代碼中處理<startup>元素,因爲此時沒有CLR(以及任何託管代碼)。唯一的方法是編寫你自己的CLR主機。我認爲,使用配置文件發佈應用程序或爲.NET 4/4.5構建版本要容易得多。

+0

感謝Dennis,這很有幫助 – rgargente

+1

控制.NET版本的信息必須在本地代碼中處理,而無需託管任何東西。但是,你可以從那裏跳到配置文件,好像本地代碼只允許讀取配置文件,而不是(例如)存儲在.exe中的PE頭或清單資源。可能你是對的,配置文件是必要的,但如果是這樣的話,那是因爲墊片編碼爲僅讀取配置文件,而不是因爲製作檢查.exe文件的本機墊片的技術困難。 –

0

我會自己發表一個答案。包含Windows的IExpress似乎是解決他的問題的好方法。

相關問題