此批处理代码用于直接运行批处理文件:
set %windir%system32driversetchosts
attrib -r %hosts%
pause
但它并没有像预期的那样将这个批处理文件打包到WinRAR自解压档案中,并在解压过程中自动运行它。
您正在创建一个32位RAR自解压存档。因此,批处理文件由32位cmd.exe
处理,根据Microsoft的文件系统重定向器文档,这将导致访问%SystemRoot%SysWOW64
而不是%SystemRoot%System32
。您还应该查看WOW64实现细节和受WOW64影响的注册表项。
目录%SystemRoot%SysWOW64
不包含driversetchosts
。hosts
文件在64位Windows上仅存在于64位应用程序的System32
的子目录中。
仅适用于在64位Windows上运行的32位应用程序的Sysnative
重定向器可用于确定批处理文件在哪个环境中运行以访问hosts
文件,该文件通常只有恶意软件修改,但没有安装有RAR自解压存档的友好应用程序。
@echo off
set "SystemPath=%SystemRoot%System32"
if exist "%SystemRoot%Sysnativecmd.exe" set "SystemPath=%SystemRoot%Sysnative"
set "HostsFile=%SystemPath%driversetchosts"
%SystemPath%attrib.exe -r %HostsFile%
pause
请注意,%SystemRoot%Sysnative
在文件系统中既不是目录,也不是链接。它是64位Windows上32位应用程序的重定向程序。因此,对于默认在64位Windows或任何其他64位应用程序上启动的64位Windows资源管理器,%SystemRoot%Sysnative
根本不存在。32位应用程序只能检查%SystemRoot%Sysnative
中是否有任何文件,但不能检查目录%SystemRoot%Sysnative
是否存在。