精华内容
下载资源
问答
  • XP系统系统(C)盘Windows/system32/config/System文件丢失或损坏时替换修复。
  • 1. System32 Windows 操作系统的系统文件夹。是操作系统的神经中枢.文件夹中包含了大量的用于Windows操作系统的文件.这里主要用于存储 DLL 文件,控制面板小程序(.CPL), 设备驱动 (.drv), 帮助文件 (.hlp 和 .cnt), ...

    首先说一句,被坑不浅……

    1. System32

    Windows 操作系统的系统文件夹。是操作系统的神经中枢.文件夹中包含了大量的用于Windows操作系统的文件.这里主要用于存储 DLL 文件,控制面板小程序(.CPL), 设备驱动 (.drv), 帮助文件 (.hlp 和 .cnt), MS-DOS 工具 (.com), 语言支持文件 (.nls), 屏幕保护 (.scr), 安装信息文件 (.inf), 以及其它用于支持,配置,或操作的文件。

    注意:不要被文件夹名字中32蒙蔽了!!!在64位操作系统中,此文件夹里的程序库都是64位的,64位的,64位的……

    2. SysWow64

    wow,什么是wow?

    64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的。关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算。AMD的回答直接了当:新的64位处理器,应该能在提高更高处理能力的同时,保持对32位应用程序的兼容性。而Intel则希望借此机会,把下一代的处理器,设计得更完美。于是,就有了AMD的x86-64(后被称为amd64)的处理器和Intel的IA-64(安腾)处理器。和amd64不一样的是,安腾处理器并没有很好地提供对32位应用程序的支持。具体信息,读者在网上应该很容易找到,也就不多说了。

    Windows作为一个操作系统,自然希望用户在运行64位操作系统时,也能像以前一样,运行各种32位应用程序。这一点,在amd64处理器上,相对容易做到。而安腾,几乎是另外一回事。(后来Intel也生产了兼容amd64的处理器,但那是后话。)

    虽然我说“相对”容易做到,但也不是空手套白狼。当操作系统运行在64位时,怎么才能保证已经存在的32位应用程序以为自己仍然运行在32位系统上呢?微软的解决方案是:Wow64,全称是32bit Windows On 64bit Windows(64位Windows上的32位Windows)。

    你也可以这样理解,虽然整个系统是运行在64位模式,但如果一个应该程序是32位的,Windows会在64位的基础上,加载一个“32位的Windows”。这样,这个32位应用程序就以为自己是运行在32位的系统之上的。

    于是,你也可以想象,这就意味着,64位的Windows,不但带有64位操作系统应有的系统文件,还带有32位系统应有的系统文件。

    我们都知道的是,Windows系统的主要系统文件都是放在一个叫做System32的文件夹中的。为了能同时放下两套系统文件,Windows会在64位的系统上,增加了一个文件夹,叫SysWow64

    这便有了一个问题,System32和SysWow64里面,哪个放的是64位的系统文件,哪个放的是32位的系统文件呢?

    如果你还记得Wow64指的是64位Windows上的32位Windows,那么,你就能会想到,SysWow64里放的是32位的系统文件。但你也可能会问,为什么一个明明叫System32的文件夹装的是64位的系统文件,而一个明明叫SysWow64的文件夹装的却是32位的系统文件呢?既然是64位的系统,为什么不能有System64和System32这样的文件夹呢?

    这个问题问得很好。答案也很简单:人在江湖,身不由己。

    3. 兼容性

    如果我问你,可曾有多少机会接触过安腾处理器呢?我想,对于一般人来讲,应该是没有的。那为什么amd64会大行其道,而安腾处理器却鲜为人知呢?还是因为一个软硬件设计上的关键概念:兼容性。

    正是因为安腾处理器,没有做好对已有的32位系统提供良好的支持,便其一直处于市场的边缘。这和你不会买一台看不了模拟信号频道的高清电视是一个道理。

    之前我们谈到的兼容性,是指在64位Windows上,兼容已经有的32位应用程序。现在考虑另一种兼容性。

    如果你写了一个很牛的32位的应用程序,现在,你想把它变成64位的应用程序,以更充分地利用64位处理器所带来的新的处理能力。你肯定觉得,这不就是让64位编译器编译一遍就完了的事儿么?可能你发现,这并不是骨感的现实。你突然发现,你的程序里,为了某些你已经想不起来的原因,把System32这个文件夹,写死在了你的程序里。而这个System32中的32,让你很不安。你尝试着运行了你的程序,却发现一切正常。为什么呢?因为这是Windows系统的另一个兼容性方面的努力:让一个已有的32位应用程序,不加修改或者尽可能少地加以修改,便可以被编译成64位应用程序并在64位Windows上运行。其实,把System32这样的路径,写死在程序里,并不是一个个案。所以,为了保证这些应用程序可以顺利地过渡到64位,Windows最后还是决定让64位的系统文件放在System32的文件夹下。而让32位的系统文件,搬到了SysWow64中去。

    你肯定会想,那让32位搬到SysWow64中去以后,那些写死在32位应用程序中的System32怎么办?答:Windows会给他们转向到SysWow64中去。那让64位中的System32转向到System64不也是一样么?真的一样么?不一样么?真的一样么?不一样么?真的不一样。

    作为64位Windows操作系统,当然是希望能充分发挥64位处理器的潜力,让应用程序更有效率地运行。如果在运行64位应用程序时,总要检查是否需要转向,势必影响程序运行效率。所以,不能给64位应用程序做没有必要的转向,如果说必须要转,那就只能转32位应用程序了。是的,没有办法,在64位操作系统中,32位应用程序要做一些小的牺牲。

    此外,为了保证32位应用程序不与64位应用程序相冲突,除了System32文件夹外,注册表也需要为32位和64位提供两套,也需要让32位的应用程序在必要时重定向。

    4. 结论

    所以SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。

    5. 后记

    本人被这个问题坑害不浅。写个程序放在winXP下运行总是出现0Xc000007b的错误,查了好多材料,都说是我32位程序引用64位版本库所至,于是我就傻乎乎的从原来系统的System32中去下载所谓的“32位”程序库,结果一点儿用都没有,郁闷的要死……一天整个人都不好了……

    本文部分参考:http://blogs.msdn.com/b/tianlin/archive/2011/10/26/syswow64.aspx

    展开全文
  • dll文件32位64位检测工具以及Windows文件夹SysWow64的坑 自从操作系统升级到64位以后,就要不断的需要面对...同时,对于程序的dll文件应该放到System32文件夹,还是SysWow64,大部分人做的决定是,32位程序放到Sys...

    dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位、64位的问题。相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别。同时,对于程序的dll文件应该放到System32文件夹,还是SysWow64,大部分人做的决定是,32位程序放到System32,64位程序放到SysWow64。是不是这样呢,那么今天就由我身边发生的一个案例来详细的说明一下。

    dll文件不匹配导致数据库无法启动

    前段时间,数据库做了一些功能上的改进,于是用VS2010编译检出了一个版本,供测试部测试。测试部拿到数据库后,通过批处理将数据库程序,注册为服务。虽然执行的是批处理,实际上注册服务的过程,是通过运行数据库程序,并给其传入命令行参数来完成的,详情请看这篇文章玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理

    通过批处理运行程序后,出现如下问题:

    应用程序无法启动

    出现这种问题,测试部不淡定了,叫我去看。我又试着运行了一下程序,依然出现这个问题。“可是在我的机器上运行的挺好的啊”,这是我说的第一句话,相信很多人看了这句话就会心的笑了。

    有问题就是有问题,既然我的机器上可以正常运行,那么测试机为什么不行呢,首先要查找原因。

    数据库是用VS2010编译的,那么在其他机器上运行,就需要运行的操作系统中以及安装了VS2010的运行时,否则就会因为缺少程序运行所必须的dll文件而无法正常运行。我想应该是这个原因,但又一想,如果没有装运行时的话,会提示缺少msvcr100.dll、msvcp100.dll等文件,上图中的问题显然不是缺少dll问题。问题有点复杂,为了简单,先试着安装运行时,看能不能解决吧。

    将VS2010的x86和x64 Runtime安装包全装了一遍。再运行程序,依然是这个醒目的错误。

    虽然安装运行时没有解决这个问题,但根据经验判断,要么是缺少dll文件,要么就是dll文件版本出了问题。那么,接下来就是想办法证明这个猜想。

    通过Dependency Walker检测数据库程序,所有依赖的dll文件都存在,没有发现什么问题。然后通过Windows Sysinternals中的ListDLLs工具检测当前运行的进程已经加载的dll文件,从列表中看到msvcr100.dll没有加载,估计就是这个dll文件出了问题。从我的机器上找到这个文件,替换了测试机上的msvcr100.dll文件后,数据库就正常运行了。

    原来,刚刚启动数据库的时候,提示找不到msvcr100.dll文件,测试的同事就从其他的XP系统的机器上找了这个文件,并分别放入到System32和SysWow64中,于是就导致了上图中的这个问题。

    由于XP系统是32位的,所以找到的msvcr100.dll文件也是32位,当把这个32位程序放到System32文件夹后,启动64位数据库,就会加载这个32位dll,由于64位程序只能加载64位dll,所以当程序尝试加载32位dll时,就会报错了。

    究竟是System32还是SysWow64

    Win7、Server2008等64位系统出来以后,为了兼容32位程序,所以采用了Wow64方案,在系统文件夹中,可以看到一个System32文件夹,和一个SysWow64文件夹。虽然这个方案对于程序来说,可以很方便的兼容32位程序,但是对于一般用户来说,想分辨System32和SysWow64那就有点困难了,因为名字太有迷惑性了。

    至于微软为什么采用Wow64方案,我就不细说了,感兴趣的朋友可以看这篇文章:什么是SysWow64。这篇文章详细的介绍了Wow64技术,以及64位系统兼容32位程序的情况。

    最后,我们可以知道:

    • SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方,而System32文件夹,是用来存放64位程序文件的地方。
    • 当32位程序加载System32文件夹中的dll时,操作系统会自动映射到SysWow64文件夹中的对应的文件。

    看到这些,你一定会认为你真正的明白了System32和SysWow64的区别,我也一样,我以为我真的懂了,但是真的懂了吗,是真懂了吗?

    无论怎样还是请你坚持看完。

    区分dll文件32位64位的程序让我倍感迷惑

    上面说到的数据库无法启动的这种情况,已经遇到了不止一次了。每次遇到这种问题,我都想能不能有个工具可以检查System32和SysWow64文件夹中的dll程序是不是对应的64位和32位程序。据我所知只有dumpbin可以查看一个dll文件是32位还是64位,但它明显不是我想要的工具,因为每次只能查看一个文件。

    好吧,自己动手,丰衣足食,既然没有这种工具,那就来写一个吧,好在判断dll文件是32位还是64位也不是很难。

    Windows系统下,exe、dll文件都可以称为PE文件,他们有相同的文件格式,称为PE文件格式。

    PE文件的第一个部分是IMAGE_DOS_HEADER,大小为64B,对于检查32位64位来说,有一个重要的成员e_lfanew,这个成员的值为IMAGE_NT_HEADERS的偏移。

    IMAGE_DOS_HEADER的定义如下:

    复制代码

    typedef struct _IMAGE_DOS_HEADER
    {//(注:最左边是文件头的偏移量。)
    +0h  WORD e_magic         //Magic DOS signature MZ(4Dh 5Ah)         DOS可执行文件标记
    +2h  WORD e_cblp          //Bytes on last page of file  
    +4h  WORD e_cp            //Pages in file
    +6h  WORD e_crlc          //Relocations
    +8h  WORD e_cparhdr       //Size of header in paragraphs
    +0ah WORD e_minalloc      //Minimun extra paragraphs needs
    +0ch WORD e_maxalloc      //Maximun extra paragraphs needs
    +0eh WORD e_ss            //intial(relative)SS value                DOS代码的初始化堆栈SS
    +10h WORD e_sp            //intial SP value                         DOS代码的初始化堆栈指针SP
    +12h WORD e_csum          //Checksum
    +14h WORD e_ip            //intial IP value                         DOS代码的初始化指令入口[指针IP]
    +16h WORD e_cs            //intial(relative)CS value                DOS代码的初始堆栈入口
    +18h WORD e_lfarlc        //File Address of relocation table
    +1ah WORD e_ovno          //Overlay number
    +1ch WORD e_res[4]        //Reserved words
    +24h WORD e_oemid         //OEM identifier(for e_oeminfo)
    +26h WORD e_oeminfo       //OEM information;e_oemid specific 
    +29h WORD e_res2[10]      //Reserved words
    +3ch DWORD e_lfanew       //Offset to start of PE header            指向PE文件头
    } IMAGE_DOS_HEADER;

    复制代码

    IMAGE_NT_HEADERS的定义如下:

    复制代码

    typedef struct _IMAGE_NT_HEADERS 
    { 
    +0h  DWORD                     Signature;
    +4h  IMAGE_FILE_HEADER         FileHeader;
    +18h IMAGE_OPTIONAL_HEADER32   OptionalHeader;
    } IMAGE_NT_HEADERS;

    复制代码

    Signature 字段:在一个有效的 PE 文件里,Signature 字段被设置为00004550h,ASCII 码字符是“PE00”。标志这 PE 文件头的开始。“PE00” 字符串是 PE 文件头的开始,DOS 头部的 e_lfanew 字段正是指向这里。

    IMAGE_FILE_HEADER 结构定义:

    复制代码

    typedef struct _IMAGE_FILE_HEADER 
    {
    +04h  WORD  Machine;                        // 运行平台
    +06h  WORD  NumberOfSections;               // 文件的区块数目
    +08h  DWORD TimeDateStamp;                  // 文件创建日期和时间
    +0Ch  DWORD PointerToSymbolTable;           // 指向符号表(主要用于调试)
    +10h  DWORD NumberOfSymbols;                // 符号表中符号个数(同上)
    +14h  WORD  SizeOfOptionalHeader;           // IMAGE_OPTIONAL_HEADER32 结构大小
    +16h  WORD  Characteristics;                // 文件属性
    } IMAGE_FILE_HEADER;

    复制代码

    其中Machine字段表示可执行文件的目标CPU类型:

    • IMAGE_FILE_MACHINE_I386         0x014c   x86
    • IMAGE_FILE_MACHINE_IA64         0x0200   Intel Itanium
    • IMAGE_FILE_MACHINE_AMD64        0x8664  x64

    这样不是很直观,上张图来看一下:

    32位64位PE文件

    有了这些,我们就可以通过程序来判断32位、64位了,代码如下:

    复制代码

    public static bool IsPE32(string path)
    {
        FileStream file = File.OpenRead(path);
        //移动到e_lfanew的位置处
        stream.Seek(0x40 - 4, SeekOrigin.Begin);
        byte[] buf = new byte[4];
        stream.Read(buf, 0, buf.Length);
        //根据e_lfanew的值计算出Machine的位置
        int pos = BitConverter.ToInt32(buf,0) + 4;
        stream.Seek(pos, SeekOrigin.Begin);
        buf = new byte[2];
        stream.Read(buf, 0, buf.Length);
        //得到Machine的值,0x14C为32位,0x8664为64位
        Int16 machine = BitConverter.ToInt16(buf, 0);
        if (machine == 0x14C)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    复制代码

    最核心的功能完成了,剩下的就是界面和遍历文件夹了,效果图:

    检测效果图

    根据检测结果和实际情况判断,检测结果没问题。那么就开始真正的检测吧,System32和SysWow64。检测结果如下图:

    32位程序System32SysWow64检测结果对比

    从图中看出,System32、SysWow64中检测出的所有的文件均为32位程序,根据常识也可以判断出,实际肯定不是这样的。一定是程序出了什么问题,那么直接用十六进制编辑器看一下两个文件是否一致吧。

    再次判断究竟是System32还是SysWow64——意想不到的坑

    通过UE查看两个文件夹中的msvcr110d.dll确实都是32位程序,而且用Beyond Compare进行比较,两个文件也没有差异。用工具查看两个文件的MD5也是完全一致:

    System32_SysWow64_msvcr110d_md5

    难道两个文件真的都是32位吗,我还是觉得不太可能。

    接下来将System32和SysWow64中的msvcr110d.dll分别移动到其他文件夹,这样System32和SysWow64就没有这个dll文件了,然后运行一个32位的需要这个dll文件的程序PeTest,提示找不到这个dll文件。分别将原来System32和SysWow64中的msvcr110.dll拷贝到这个PeTest所在的目录,运行程序。当使用SysWow64中的msvcr110d.dll时,程序可以正常运行,说明这个文件确实是32位。当使用System32中的msvcr110d.dll时,程序无法正常运行,出现文章开始时提到的错误。为什么通过Beyond Compare、UE、MD5检测为同样的dll文件,一个可以正常运行,另外一个就不可以呢。

    再次思考这两句话:

    • SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方,而System32文件夹,是用来存放64位程序文件的地方。
    • 当32位程序加载System32文件夹中的dll时,操作系统会自动映射到SysWow64文件夹中的对应的文件。

    32位程序加载System32文件夹中的dll文件,操作系统会自动映射到SysWow64文件夹,也就是说64位程序,系统不会再做映射。

    通过任务管理器查看UE、Beyond Compare和MD5三个进程全部为32位进程,即三个程序全部是32位。

    至此我们可以重新理解“32位程序加载System32文件夹中的dll文件,操作系统会自动映射到SysWow64文件夹”这句话,应该是“只要32位程序访问System32文件夹,无论是加载dll,还是读取文本信息,都会被映射到SysWow64文件夹”。

    这个理解对吗,我们来做一个实验验证一下。

    找一个32位的文本编辑器Notepad++(Win7系统自带的是64位),在SysWow64文件夹中新建一个1.txt的文件,打开编辑此文件,内容为SysWow64。然后在打开文件对话框中的输入框中输入“C:\Windows\System32\1.txt”,打开文件,看到内容为SysWow64,如图所示:

    System32_SysWow64_文本文件

    System32中没有创建1.txt文件,32位程序访问System32中的1.txt文件,被自动映射到SysWow64文件夹中的1.txt文件,而如果用64位的Notepad编辑器打开System32中的1.txt文件,就会提示找不到文件:

    Notepad_1.txt

    由此就可以验证猜想“只要32位程序访问System32文件夹,无论是加载dll,还是读取文本信息,都会被映射到SysWow64文件夹”是正确的。

    Program Files (x86)与Program Files

    由System32与SysWow64的情况,考虑到Program Files (x86)与Program Files是不是也是这种情况。当32位程序访问Program Files目录时,会被自动映射到Program Files (x86)目录?

    还是通过1.txt的方式来验证,发现当32位程序访问Program Files目录时,并没有被映射到Program Files (x86)目录。

    32位程序真的需要访问System32吗

    经过了这么多验证,总算是知道32位程序无法访问System32,只有64位程序才能访问,由此认为,这是Windows的一个非常大的坑。但是仔细想想,32位程序真的需要访问System32吗。就用这个dll检测工具来说吧。

    如果在64位系统上,32位程序无法访问System32,为了访问它,就需要编译为64位。而如果程序编译为64位,就无法在32位系统上运行,同时由于在32位系统上不需要检测32位、64位,所以只需要32位程序即可。这可真是一个矛盾的事情,难道必须编译两个程序,一个32位,一个64位,来适应不同的操作系统吗。如果是C++的话,那么答案是这样的,必须编译一个32位一个64位。而DotNet就不一样了,编译的时候选择“AnyCPU”,并且不选择“首选32位”(VS2012中默认选中),编译后的程序,可以同时在32位和64位系统上运行,32位系统上是32位进程,64位系统上是64位进程,是不是很方便呢,这正是DotNet和AnyCPU的魅力所在。

    至此,dll检测程序,不需要做任何代码修改,只需在编译的时候选择AnyCPU,并去掉“首选32位”选项,即可正常检测System32、SysWow64文件夹中的dll文件。

    32位程序与64位程序的区别总结

    至此,我想应该是真的明白了System32与SysWow64的区别了吧,这个不大不小的坑,算是迈过去了,那么就来总结一下32位程序与64位程序的区别:

    • SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方,而System32文件夹,是用来存放64位程序文件的地方。
    • .Net程序以AnyCPU配置,并选择“首选32位”编译,会以32位的进程运行,此时就无法访问System32文件夹中的文件;如果没有选择“首选32位”,则会以64位的进程运行,这样就可以访问System32文件夹了。(VS2012中,“首选32位”默认是选中的)。
    • 32位程序的寻址空间有限,最多达到4G,而64位程序的寻址空间可以达到TB级,想要使用大内存的话,就升级到64位吧,好在DotNet程序从32位升级到64位比较简单,不像C++那么麻烦。
    • 32位程序访问System32目录,会自动被映射到SysWOW64目录,而64位程序可以访问System32目录和SysWOW64目录。
    • 32位程序与64位程序有各自的注册表。
    • 32位与64位程序都可以访问Program Files (x86)与Program Files目录。
    • 更多区别可以参考:32-bit and 64-bit Windows: frequently asked questions

    工作与学习过程中会遇到很多坑,一不小心就会跌倒,但是从哪里跌倒的就从哪里爬起来,总结经验教训,以饱满的热情再次起航,胜利就在不远的前方。

    由于本人水平有限,文中如有不对之处,还请批评指正,本人不胜感激!

    展开全文
  • Windows下的SysWow64和System32

    万次阅读 多人点赞 2016-01-07 17:57:22
    装载自:什么是SysWow64前言以前我一直以为system32里面是32位系统时的程序,SysWow64里面是64位系统要用的,看完后才发现,正好搞反了.正文Wow!什么是Wow64今天有个同事,被SysWow64搞晕了。这里简单介绍一下。64位的...

    装载自:什么是SysWow64

    前言

    以前我一直以为system32里面是32位系统时的程序,SysWow64里面是64位系统要用的,看完后才发现,正好搞反了.

    正文

    Wow!什么是Wow64

    今天有个同事,被SysWow64搞晕了。这里简单介绍一下。

    64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的。关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算。AMD的回答直接了当:新的64位处理器,应该能在提高更高处理能力的同时,保持对32位应用程序的兼容性。而Intel则希望借此机会,把下一代的处理器,设计得更完美。于是,就有了AMD的x86-64(后被称为amd64)的处理器和Intel的IA-64(安腾)处理器。和amd64不一样的是,安腾处理器并没有很好地提供对32位应用程序的支持。具体信息,读者在网上应该很容易找到,也就不多说了。

    Windows作为一个操作系统,自然希望用户在运行64位操作系统时,也能像以前一样,运行各种32位应用程序。这一点,在amd64处理器上,相对容易做到。而安腾,几乎是另外一回事。(后来Intel也生产了兼容amd64的处理器,但那是后话。)

    虽然我说“相对”容易做到,但也不是空手套白狼。当操作系统运行在64位时,怎么才能保证已经存在的32位应用程序以为自己仍然运行在32位系统上呢?微软的解决方案是:Wow64,全称是32bit Windows On 64bit Windows(64位Windows上的32位Windows)。

    你也可以这样理解,虽然整个系统是运行在64位模式,但如果一个应该程序是32位的,Windows会在64位的基础上,加载一个“32位的Windows”。这样,这个32位应用程序就以为自己是运行在32位的系统之上的。

    于是,你也可以想象,这就意味着,64位的Windows,不但带有64位操作系统应有的系统文件,还带有32位系统应有的系统文件。

    我们都知道的是,Windows系统的主要系统文件都是放在一个叫做System32的文件夹中的。为了能同时放下两套系统文件,Windows会在64位的系统上,增加了一个文件夹,叫SysWow64。

    这便有了一个问题,System32和SysWow64里面,哪个放的是64位的系统文件,哪个放的是32位的系统文件呢?

    如果你还记得Wow64指的是64位Windows上的32位Windows,那么,你就能会想到,SysWow64里放的是32位的系统文件。但你也可能会问,为什么一个明明叫System32的文件夹装的是64位的系统文件,而一个明明叫SysWow64的文件夹装的却是32位的系统文件呢?既然是64位的系统,为什么不能有System64和System32这样的文件夹呢?

    这个问题问得很好。答案也很简单:人在江湖,身不由己。

    兼容性

    如果我问你,可曾有多少机会接触过安腾处理器呢?我想,对于一般人来讲,应该是没有的。那为什么amd64会大行其道,而安腾处理器却鲜为人知呢?还是因为一个软硬件设计上的关键概念:兼容性。

    正是因为安腾处理器,没有做好对已有的32位系统提供良好的支持,便其一直处于市场的边缘。这和你不会买一台看不了模拟信号频道的高清电视是一个道理。

    之前我们谈到的兼容性,是指在64位Windows上,兼容已经有的32位应用程序。现在考虑另一种兼容性。

    如果你写了一个很牛的32位的应用程序,现在,你想把它变成64位的应用程序,以更充分地利用64位处理器所带来的新的处理能力。你肯定觉得,这不就是让64位编译器编译一遍就完了的事儿么?可能你发现,这并不是骨感的现实。你突然发现,你的程序里,为了某些你已经想不起来的原因,把System32这个文件夹,写死在了你的程序里。而这个System32中的32,让你很不安。你尝试着运行了你的程序,却发现一切正常。为什么呢?因为这是Windows系统的另一个兼容性方面的努力:让一个已有的32位应用程序,不加修改或者尽可能少地加以修改,便可以被编译成64位应用程序并在64位Windows上运行。其实,把System32这样的路径,写死在程序里,并不是一个个案。所以,为了保证这些应用程序可以顺利地过渡到64位,Windows最后还是决定让64位的系统文件放在System32的文件夹下。而让32位的系统文件,搬到了SysWow64中去。

    你肯定会想,那让32位搬到SysWow64中去以后,那些写死在32位应用程序中的System32怎么办?答:Windows会给他们转向到SysWow64中去。那让64位中的System32转向到System64不也是一样么?真的一样么?不一样么?真的一样么?不一样么?真的不一样。

    作为64位Windows操作系统,当然是希望能充分发挥64位处理器的潜力,让应用程序更有效率地运行。如果在运行64位应用程序时,总要检查是否需要转向,势必影响程序运行效率。所以,不能给64位应用程序做没有必要的转向,如果说必须要转,那就只能转32位应用程序了。是的,没有办法,在64位操作系统中,32位应用程序要做一些小的牺牲。

    此外,为了保证32位应用程序不与64位应用程序相冲突,除了System32文件夹外,注册表也需要为32位和64位提供两套,也需要让32位的应用程序在必要时重定向。

    结论

    所以SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。

    后记

    兼容性是一个重要的事情。当然,也是一个很有意思的事情。如果你在Windows 7中运行”winver”,你就会发现,Windows 7原来是Windows 6.1。为什么呢?事情是这样的,Windows XP是Windows 5.2,Windows Vista开始变成了6.0,结果,很多应用程序只是检查操作系统版本号的头一位,发现不是5,于是就提示用户说:“我们不支持Windows XP以前的系统”。这也是从Windows Vista的不成功中,学习到的一课。也许,以后永远都没有Windows 7.0也未可知啊。

    展开全文
  • 1、首先有一个pe启动的u盘 2、进入到pe系统中,找到系统引导修复,然后打开它 3、如果可以修复,就不用往下看了,重启电脑正常进入电脑桌面。 4、如果不可以修复的话,在原系统盘中创建一个a.txt文件,打开编辑...

    1、首先有一个pe启动的u盘

    2、进入到pe系统中,找到系统引导修复,然后打开它

    3、如果可以修复,就不用往下看了,重启电脑正常进入电脑桌面。

    4、如果不可以修复的话,在原系统盘中创建一个a.txt文件,打开编辑,输入

    chkdsk/f
    y
    pause

    保存,然后更改文件后缀名为.bat 即a.bat

    5、如图

    6、完成后重启电脑,就可以了。

     

    注:这个只是解决方法之一,如果实在不行就重装系统吧!如果是win7,win10的系统也可以试一下。

    展开全文
  •  系统特殊文件夹是包含公共信息的文件夹,如“Program Files”、“Programs”、“System”或“Startup”。特殊文件夹在默认情况下由系统设置,或者由用户在安装 Windows 的某个版本时显式进行设...
  • 因为想要使本地idea连接hadoop集群,看了网上的操作,有一项需要把hadoop.dll放入放到C:\Windows\System32中,但是, 在我复制的过程中,总是提示我上图!!! 之后,就搜索解决方案,说windows系统为了安全,然后我...
  • 很多朋友在运行某个软件,特别是一些游戏的时候经常...特别是在64位操作系统中,到底是放到System,System32还是Syswow64? 32位的Windows操作系统可以同时运行32位和16位代码,而64位Windows操作系统可以直接运行...
  • 在32位操作系统的Windows文件夹中,SYSTEM和SYSTEM32两个文件夹,分别用来存放16位和32位的DLL文件。 在64位操作系统的Windows文件夹中,System32和SysWOW64两个文件夹,分别用来存放64位和32位的DLL文件。 背景...
  • 在弹出的浏览界面中选择你要复制的文件,复制,粘贴到system32下(在这里由于explorer.exe已被杀掉,就不会再提示权限问题) 成功后回到任务管理器,点击"文件(F)",打开【运行新任务】,在打开后输入explorer.exe...
  • SysWow64和System32

    千次阅读 2018-09-24 15:52:26
    AMD的回答直接了当:新的64位处理器,应该能在提高更高处理能力的同时,保持对32位应用程序的兼容性。而Intel则希望借此机会,把下一代的处理器,设计得更完美。于是,就有了AMD的x86-64(后被称为amd64)的处理器和...
  • 要执行此操作,请从“高级”选项打开“命令提示符”,然后执行以下命令 copy c:windowssystem32configRegBack* c:windowssystem32config 系统会询问您是要覆盖所有文件还是部分覆盖文件。 您应该输入All,然后按...
  • 编程复制文件到system32文件夹中

    千次阅读 2018-03-08 15:53:20
    前提条件:程序需要将sys驱动复制到systems/drives中才能正常运行。...① 在32位系统上,上面代码能成功复制 ② 在64位系统上,上面代码会将文件复制到C:\Windows\SysWOW64\drivers中,因为系统为...
  • C:/windows/system32无权限解决方法

    千次阅读 2020-05-15 09:45:14
    更改所有者为当前用户,替换所有子文件和子文件的所有者为当前用户,并提供完全控制权限。
  • 启动系统时无法正常启动提示\windows\system32\winload.efi 解决方案 解决方法如下: 1、去bios把security boot改成disabled即可,一般按DEL键进bios,笔记本电脑可能需要其他快捷键,一般在开机的时候都会有提示...
  • Windows10 1909:真正解决开机C:\WINDOWS\system32\config\systemprofile\Desktop不可用Windows10 1909:真正解决开机C:\WINDOWS\system32\config\systemprofile\Desktop不可用问题解决方案 Windows10 1909:真正...
  • 取得system32文件夹下面文件的写入权限 TAKEOWN /F %SystemRoot%\system32\riched32.dll ICACLS %SystemRoot%\system32\riched32.dll /grant Administrators:F 转载于:...
  • 1.第一种解决方法 如果为只读状态,也是无法修改hosts文件 第二种解决方法
  • %SystemRoot%\system32\SHELL32.dll 中的所有图标文件 可能大家有时需要。 顺便试试extraico
  • 蓝屏C\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt

    万次阅读 多人点赞 2020-02-16 12:26:57
    C\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt 代码DRIER… 今早起来开电脑,一阵蓝屏,气死我了,昨天还还好好的,今天就死了 上网一查,各种错误,内存占了灰尘,异常关机,突发断电,以及各种驱动不兼容等云云...
  • 开机后如图所示,点击高级选项显示 进入疑难解答 接着点击进入启动设置 选择【4】安全模式重启即可解决
  • 解决win10开机出现C:\WIndows\system32\config\systemprofile\Desktop不可用 问题
  • 针对蓝屏报错\Windows\system32\drivers\bootsafe64_ey.sys,之前有朋友的电脑经常时不时的出现蓝屏,并不是系统引导问题,而是驱动程序存在问题。我们需要借助启动项U盘(重装系统U盘)进入PE系统,在C盘目录下的...
  • file C:\Windows\system32\cmd.exe;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\SysWOW64 npm ERR! path C:\Windows\system32\cmd.exe;C:\Windows\system32;C:\Windows;C:\Windows\System...
  • Windows 10:解决开机显示C:\WINDOWS\system32\config\systemprofile\Desktop不可用的方法
  • 1.首先点击win,搜索记事本。 2.以管理员权限打开 3.点击文件,打开(路径为C:\Windows\System32\drivers\etc\hosts) 4.然后点击文件类型为所有文件 5.打开hosts,修改然后ctrl+s ...
  • c:\windows\system32\config\systemprofile\desktop 打不开 Question 重启开机后显示桌面打不开: 再次重启后无效 Solution 打开注册表regedit如下路径,复制Desktop值到 同路径下的...
  • 修改windows10下C:\Windows\System32\drivers\etc\的hosts文件权限 转:https://blog.csdn.net/qq_33703550/article/details/79230577 ok!非常顺利! jiajin_0032018-02-01 16:50:21 当遇到有hosts文件不能编辑...
  • win7系统对于大家来说都非常熟悉了,在使用的时候会遇到各种问题,就像windows7系统出现找不到文件c:\Windows\system32\msdt.exe的情况。很多网友都没有关于windows7系统出现找不到文件c:\Windows\system32\msdt.exe...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,308,944
精华内容 523,577
关键字:

system32

友情链接: ALIENTEK-MINISTM32-19.rar