我需要能够枚举在运行Windows服务器的Windows 2016实例中的C:\Windows\system32\dns下的文件夹。
在尝试了FindFirst()/FindNext()并没有得到任何结果之后,我构建了一个快速的VCL来了解正在发生的事情。我有一个TButton和一个TEdit,按钮的OnClick在下面:
procedure TForm1.Button1Click(Sender: TObject);
begin
FDir := 'C:\Windows\System32\';
with TFileOpenDialog.Create(nil) do
try
Title := 'Select Directory';
Options := [fdoPickFolders, fdoPathMustExist, fdoForceFileSystem];
OkButtonLabel := 'Select';
DefaultFolder := FDir;
FileName := FDir;
if Execute then
Edit1.Text := Filename;
finally
Free;
end;
end;当我以管理员身份或通常在服务器上运行它并尝试浏览到FileOpenDialog中的文件夹FileOpenDialog时,我会得到一个错误:
窗口找不到‘C:\ Windows \system32 32\dns’。检查拼写,然后重试。
但是,我知道文件夹是存在的,我可以在服务器上使用Windows浏览它,所以Delphi代码或应用程序运行的权限肯定有问题。
拜托,有人能建议我该怎么做才能解决这个问题吗?
发布于 2020-05-05 20:17:46
感谢@SertacAkyuz提醒我文件系统重定向-尝试从32位程序访问%Windir%\ system 32将被重定向到%Windir%\SysWow64 64,其中不包含dns文件夹。
您可以使用虚拟别名%Windir%\Sysnative从32位应用程序获得对实际system32文件夹的访问,这适用于上述情况。因此,浏览到%Windir%\sysnative\dns允许我正确枚举文件夹。
https://stackoverflow.com/questions/61621549
复制相似问题