为什么从WinRAR SFX执行的批处理文件无法访问主机文件?

时间:2017-11-01 22:40:01

标签: batch-file cmd command winrar sfx

此批处理代码可直接运行批处理文件:

set %windir%\system32\drivers\etc\hosts
attrib -r %hosts%
pause

但是,在将此批处理文件打包到WinRAR自解压存档中并在提取过程中自动运行时,它无法正常工作。

1 个答案:

答案 0 :(得分:1)

您正在创建一个32位RAR自解压存档。因此,批处理文件由32位cmd.exe处理,这导致根据Microsoft的File System Redirector文档访问%SystemRoot%\SysWOW64而不是%SystemRoot%\System32。您还应该查看WOW64 Implementation DetailsRegistry Keys Affected by WOW64

目录%SystemRoot%\SysWOW64不包含drivers\etc\hosts。对于64位应用程序,hosts文件仅存在于System32的子目录中的64位Windows上。

Sysnative重定向器仅适用于在64位Windows上运行的32位应用程序,可用于确定批处理文件在哪个环境中运行以访问通常仅恶意软件修改的hosts文件,但没有安装RAR自解压存档的友好应用程序。

@echo off
set "SystemPath=%SystemRoot%\System32"
if exist "%SystemRoot%\Sysnative\cmd.exe" set "SystemPath=%SystemRoot%\Sysnative"
set "HostsFile=%SystemPath%\drivers\etc\hosts"
%SystemPath%\attrib.exe -r %HostsFile%
pause

请注意%SystemRoot%\Sysnative既不是文件系统中的目录也不是链接。它是64位Windows上32位应用程序的重定向程序。因此,在64位Windows上默认启动的64位Windows资源管理器或任何其他64位应用程序%SystemRoot%\Sysnative根本不存在。 32位应用程序只能检查%SystemRoot%\Sysnative中是否有任何文件,但无法检查目录 %SystemRoot%\Sysnative是否存在。