我使用Windows 64位与UAC,需要检查Windows系统文件夹中是否存在文件,而不提升权限.已经在过去6小时内搜索解决方案,但没有成功...... :(
根据这个问题,FileExists()返回false,即使文件存在,我也可以使用Wow64DisableWow64FsRedirection(),但我在许多其他地方看到它不推荐.
现在我正在尝试使用特殊的"Sysnative"别名,但是当使用FileExists功能时,它不起作用(例如:如果fileexists('C:\ Windows\Sysnative\dfrgui.exe')则...)
拜托,有人可以帮我吗?也许是汇编(Asm)解决方案?
谢谢!
Sysnative应该起作用并且是最合适的解决方案.
从MSDN引用:
32位应用程序可以通过%windir%\ Sysnative替换%windir%\ System32来访问本机系统目录.WOW64将Sysnative识别为一个特殊别名,用于指示文件系统不应重定向访问.这种机制灵活且易于使用,因此,它是推荐的绕过文件系统重定向的机制.请注意,64位应用程序无法使用Sysnative别名,因为它是虚拟目录而不是真实目录.
小型演示(Delphi XE - W7 x64):
program SO22990909;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
STR_SYSNATIVEPATH = 'c:\windows\sysnative\';
STR_SYSTEM32PATH = 'c:\windows\system32\';
STR_DETECTFILE = 'wups2.dll';
procedure CheckFile(Filename : String);
begin
if FileExists(Filename) then
Writeln(Format('file %s found', [Filename]))
else
Writeln(Format('file %s not found', [Filename]));
end;
begin
try
CheckFile(STR_SYSTEM32PATH+STR_DETECTFILE);
CheckFile(STR_SYSNATIVEPATH+STR_DETECTFILE);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)
程序输出(文件仅存在于c:\ windows\system32中):

使用文件dfrgui.exe(文件存在于c:\ windows\system32和c:\ windows\syswow64中):

| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |