.NET平台处理32位系统和64位系统的一点兼容性问题

来源:互联网 发布:网络及信息安全答案 编辑:程序博客网 时间:2024/05/17 23:15

现在随着硬件的升级换代,越来越多的电脑开始使用64位的系统,但是仍然有很大一部分无法升级的旧电脑还在使用32位的操作系统。如果在64位系统下开发和运行32位程序的话,和32位系统运行32位程序会有一些区别。

注册表问题

32位系统和64位系统的注册表结构并不相同。64位系统下,使用32位程序访问注册表的话,节点会被自动重定向到Wow6432Node节点下。例如想要保存信息到

HKEY_LOCAL_MACHINE\SOFTWARE\MyApp

的话,实际上会保存到

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\App

System32文件夹

%windir%\System32文件夹存放着各种软件所需要的运行库等。一般情况下是C:\Windows\System32,作用和Linux系统下的/usr/share/类似。由于很多老软件类程序中硬编码了System32文件夹,因此为了向后兼容性,在64位系统中仍然保留了这个文件夹。但是由于32位和64位系统的不同,因此32位程序所需要的库等都被放置在了%windir%\SysWOW64下。为了保证兼容性,32位程序在64位系统下访问System32文件夹的时候,会被重定向到SysWOW64下,这个特性叫做文件系统重定向。

以下文件夹不会被重定向,32位和64位程序都可以访问。

%windir%\system32\catroot%windir%\system32\catroot2%windir%\system32\driverstore%windir%\system32\drivers\etc%windir%\system32\logfiles%windir%\system32\spool

要在32位程序中访问System32文件夹的时候,可以通过以下方式访问。这是一个仅在32位程序中可用的别名,可以直接访问System32文件夹。

%windir%\Sysnative

判断系统位数

最后一件事情就如判断系统位数,在不同的系统下执行不同的操作。如果使用的是.NET4以上的话,Environment类中提供了一个属性Is64BitOperatingSystem,如果当前是64位操作系统的话,就会返回true。另外还有一个Is64BitProcess属性,如果当前进程是64位进程的话,就会返回true。

0 0
原创粉丝点击