现在随着硬件的升级换代,越来越多的电脑开始使用64位的系统,但是仍然有很大一部分无法升级的旧电脑还在使用32位的操作系统。如果在64位系统下开发和运行32位程序的话,和32位系统运行32位程序会有一些区别。
32位系统和64位系统的注册表结构并不相同。64位系统下,使用32位程序访问注册表的话,节点会被自动重定向到Wow6432Node节点下。例如想要保存信息到
HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
的话,实际上会保存到
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\App
%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。