Delphi RAD Studio 10.2, невозможно просмотреть системную папку windows с помощью FileOpenDialog - PullRequest
0 голосов
/ 05 мая 2020

Мне нужно иметь возможность перечислить папки, присутствующие в C:\Windows\system32\dns на экземпляре Windows server 2016, на котором запущен Windows DNS-сервер.

Попробовав FindFirst() / FindNext() и не получив результатов, я быстро создал приложение VCL Forms, чтобы понять, что происходит. У меня есть 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;

Когда я запускаю это - либо как администратор, либо обычно на сервере - и пытаюсь просмотреть в папку C:\Windows\system32\dns\ в FileOpenDialog, я получаю сообщение об ошибке:

Windows не могу найти 'C: \ Windows \ system32 \ dns'. Проверьте орфографию и попробуйте еще раз.

Однако я знаю, что папка существует, и могу просматривать ее с помощью Windows Explorer на сервере, поэтому должна быть проблема с кодом Delphi , или разрешения, под которыми работает приложение.

Пожалуйста, кто-нибудь может предложить, что мне нужно сделать, чтобы исправить это?

1 Ответ

4 голосов
/ 05 мая 2020

Спасибо @SertacAkyuz за напоминание о перенаправлении файловой системы - попытка получить доступ к% Windir% \ system32 из 32-битной программы будет перенаправлена ​​на% Windir% \ SysWow64, в котором нет папки dns.

Вы можете использовать виртуальный псевдоним% Windir% \ Sysnative, чтобы получить доступ к фактической папке system32 из 32-битного приложения, и это работает для указанного выше случая. поэтому просмотр% Windir% \ sysnative \ dns позволяет мне правильно перечислять папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...