Delphi Windows 64和UAC上存在文件-有新的解决方案吗?

Delphi Windows 64和UAC上存在文件-有新的解决方案吗?,delphi,delphi-7,Delphi,Delphi 7,我正在UAC上使用Windows 64位,需要在不提升权限的情况下检查Windows系统文件夹中是否存在文件。已在过去6小时内搜索解决方案,但未成功…: 根据这个问题,我可以使用Wow64DisableWow64FsRedirection,但我在许多其他地方看到它不被推荐 现在我尝试使用特殊的Sysnative别名,但当与FileExists函数一起使用时,它不起作用。例如:如果FileExists'C:\Windows\Sysnative\dfrgui.exe',则 拜托,有人能帮我吗?也许是

我正在UAC上使用Windows 64位,需要在不提升权限的情况下检查Windows系统文件夹中是否存在文件。已在过去6小时内搜索解决方案,但未成功…:

根据这个问题,我可以使用Wow64DisableWow64FsRedirection,但我在许多其他地方看到它不被推荐

现在我尝试使用特殊的Sysnative别名,但当与FileExists函数一起使用时,它不起作用。例如:如果FileExists'C:\Windows\Sysnative\dfrgui.exe',则

拜托,有人能帮我吗?也许是汇编程序Asm解决方案

谢谢大家!

应该有效,是最合适的解决方案

引用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.
程序输出文件仅存在于c:\windows\system32中:

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


根据您的文件的注释

c:\windows\syswow64\test\file.dll
它位于32位系统目录中。测试它的存在与否

FileExists('c:\windows\system32\test\file.dll')

仔细阅读这本书,你会受益匪浅

您的可行选项是Sysnative或64位进程。请注意,UAC根本不相关。“提升也不是。”DavidHeffernan,我找到了这个ASM函数,但它在Windows7中不起作用。关于UAC,我在这里做了测试,当以管理员身份执行应用程序时,filexists函数可以工作,但当权限受到限制时不能工作。谢谢同样,2002年的一些ASM会有什么帮助?你有什么理由相信它会的,还是你只是在疯狂地挣扎?其次,为什么UAC和海拔高度很重要。问题是文件系统重定向器的问题,还是其他问题?我有一种强烈的感觉,你没有正确地诊断出这个问题。不仅仅是因为dfrgui.exe同时存在于32位和64位系统目录中。底线是为了解决一个问题,你必须理解它。目前你还不知道真正的问题是什么。问问题为时过早。@DavidHeffernan抱歉,但如果我知道所有这些答案,也许就没有必要问这个问题:事实上,我犯了一个错误,路径C:\Windows\Sysnative\dfrgui.exe只是一个示例,当与Sysnative一起使用时可以工作,但我正在检查软件创建的文件夹中的一个文件,类似这样的内容:c:\windows\syswow64\test\file.dll。再次抱歉,我不知道为什么sysnative在第一个示例中工作,但路径c:\windows\sysnative\test\file.dll不工作。是吗?@Paruba你的根本问题是,你在胡乱尝试,却没有认真思考。作为一项练习,你真的应该试着确定并写下问题的确切原因。谢谢,但在我的Delphi 7中它不起作用:我的意思是,代码可以编译,但我也有同样的问题……好的,对不起,我在这里做了更多的测试,你的例子也可以。但是路径C:\Windows\Sysnative\dfrgui.exe只是一个示例,我需要检查类似于C:\Windows\syswow64\test\file.dll的内容,但与示例不同。拜托,你知道我做错了什么吗?谢谢这是重定向路径,使用system32目录查看David的答案,我的示例应该与您的文件一起使用。。。