Windows系统System32目录的访问权限问题

    最近做一个WOW64的更新程序,32位的应用程序跑在64位的系统上,32位的应用程序依赖于一个64位的驱动,做更新时驱动文件也要同时更新。

    可是更新程序执行完成后,没有任何的抛错,但是位于%systemroot%/system32/drivers下的驱动文件却死活替换不了,很奇怪。

    写了个简单的Bat脚本,除去一大堆的判断,核心就是:
if exist %systemroot% (
        echo %systemroot%\System32\drivers >> C:\test.txt
        xcopy "%DRIVER_FILE_PATH%" %systemroot%\System32\drivers  /Y
        echo %errorlevel% >> C:\test.txt
    )
    手动执行是OK的,驱动文件能正常的拷贝到%systemroot%/system32/drivers目录,C:\test.txt输出
    C:\Windows\System32\drivers
    0

    排除了当前用户环境变量不存在systemroot的可能性。
    修改更新程序,让更新程序调用该脚本,然后以管理员用户执行,C:\test.txt输出为
    C:\Windows\System32\drivers
    0

    但是驱动文件没有拷贝到%systemroot%/system32/drivers中。
    感觉跟手动执行没有什么差别?问题到底出在哪里呢?

    更新程序是WOW64,那么它执行脚本时运行的xcopy程序应该是SysWOW64下的xcopy.exe,而不是System32下的xcopy.exe,排除用户权限问题后,手动执行和更新程序执行应该只有这一点差别。

    恢复环境,将System32下的xcopy.exe拷贝到脚本所在目录,然后执行脚本,C:\test.txt输出为
    C:\Windows\System32\drivers
    0
    驱动文件成功拷贝到%systemroot%/system32/drivers中

    恢复环境,将SysWOW64下的xcopy.exe拷贝到脚本所在目录,然后执行脚本,C:\test.txt输出为
    C:\Windows\System32\drivers
    0
    但是驱动文件没有拷贝到%systemroot%/system32/drivers中,跟预想的一样,将目标文件夹改为%systemroot%/system32,xcopy返回0,但是文件还是没有真正的复制过去。

    查看了一下属性,System32的所有者是Administrator,为什么32位的xcopy往其中拷贝文件有问题(且xcopy没有返回错误),而64位的xcopy拷贝是OK的呢?看来WOW64还是有很多未知的坑,等待挖掘!

    原来运行在Windows 64位系统上的32位程序往System32拷贝文件时,系统默认重定向到对应的SysWOW64目录。

你可能感兴趣的:(xcopy,wow64,system32,Questions,and,Answers)