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目录。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值