关于系统32位和64位的程序发布和部署(一)

        如果程序集文件只包含类型安全的托管代码,那么无论在32位版本的windows上,还是64位版本上的windows上,所写的代码都应该能正常工作。在这两种版本上的windowss上运行,源代码无需进行任何改动。事实上,编译器最终生成的EXE/ELL文件不仅能在32位windows上运行,还能在64位windows的X64和IA64版本上运行。也就是说,只要机器上安装了.NET Framework的某个版本,文件就能在这台机器上运行。

 

        取决于/platform开关选项,C#编译器生成的程序集要么包含一个PE32头,要么包含一个PE32+头,除此之外,编译器还会在头中指定要求什么CPU架构(如果使用默认值anycpu,则不明确指定)。Microsoft发布了SDK命令实用程序DumpBin.exe和CorFlags.exe,可用他们检查编译器生成的托管模块所嵌入的信息。

        运行一个可执行文件时,Windows会检查这个EXE文件的头,判断应用程序需要的是32位地址空间,还是64位地址空间,具有PE32头的文件可在一个32位或64位地址空间中运行,具有PE32+头的文件则需要一个64位地址空间。Windows还会检查头中嵌入的CPU架构信息,确保当前计算机的CPU是否符合要求的,最后,Windows的64位版本提供了一个名为WoW64(Windows on Windows64)的技术,允许运行32位Windows应用程序。该技术甚至允许使用X86本地代码的32位应用程序在Itanium机器上运行。
        WINDOWS 检查好EXE文件头,决定是创建32位、64位还是WoW64进程之后,会在进程地址空间中加载MSCorEE.dll的X86,X64或IA64版本。如果是Windows的X86版本,MSCorEE.dll的X86版本会在C:\Windows\System32目录中。如果是Windows的X64或IA64版本,MSCorEE.dll的X86版本再C:\Windows\SysWow64目录中,64位版本(X64或者IA64)则在C:\Windows\System32目录中(为了向后兼容),然后,进程的主线程调用MSCorEE.dll中定义的一个方法。这个方法初始化CLR,加载EXE程序集,然后调用其入口方法(Main),随机,托管的应用程序将启动并运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值