對於文件本身,我相信(還沒有確認),你可以自己修改IMAGE_COR20_HEADER。只需設置MinorRuntimeVersion就可以做到這一點。以下是關於如何使用IMAGE_COR20_HEADER來確定裝入哪個運行時的說明(有點過時):http://blogs.msdn.com/joshwil/archive/2004/10/15/243019.aspx
爲什麼不只是總是針對x86進行編譯,64位運行時會爲您帶來什麼好處?
請注意,某些代碼(interop/P/invoke)只能在32或64位運行時中運行,因此只需將相同的程序集加載到另一個運行時即可。
編輯:快速和骯髒的樣本讀IMAGE_COR20_HEADER:
_pDosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(_pFileBase);
_pNTHeader = reinterpret_cast<PIMAGE_NT_HEADERS>(_pFileBase + _pDosHeader->e_lfanew);
_pFileHeader = reinterpret_cast<PIMAGE_FILE_HEADER>(&_pNTHeader->FileHeader);
_pOptionalHeader = reinterpret_cast<PIMAGE_OPTIONAL_HEADER>(&_pNTHeader->OptionalHeader);
IMAGE_DATA_DIRECTORY const* entry = NULL;
entry = &pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_COMHEADER];
if (entry->VirtualAddress == 0 || entry->Size == 0 || entry->Size < sizeof(IMAGE_COR20_HEADER)) {
return E_FAIL;
}
pClrHeader = reinterpret_cast<IMAGE_COR20_HEADER*>(RtlImageRvaToVa32(_pNTHeader, _pFileBase, entry->VirtualAddress, 0));
不相信這是一個好主意,這樣做,作爲安裝程序的步驟雖然。
不完全確定你想通過這樣做達到什麼目的? – 2009-06-02 00:20:35
運行速度快兩倍? – 2009-06-02 04:25:51