Не скрытый каталог не отображается в Проводнике, но программа, которая сделала его, может получить к нему доступ

26

Я использую IMAPSize для резервного копирования моих почтовых ящиков. Процесс просто сбрасывает содержимое вашего почтового ящика в .emlфайлы на вашем диске. В любом случае, первый почтовый ящик, для которого я создал резервную копию, отображается так, как я ожидал. Однако следующий не отображается в Проводнике, и, если я введу его в адресную строку, он скажет, что его не существует.

Тем не менее, IMAPSize настаивает на том, что файлы там. (Много диска письменности выполняется во время операции) . Кроме того, каталог действительно появится в диалоговом окне каталога Windows , и - как я установлен GNU инструменты - это показывает в ls(но не в родном dir). Я не могу cdвойти в каталог, но ls, кажется, могу получить к нему доступ (и, действительно, каталоги и файлы, которые я ожидаю, по-видимому, там).

окно командной строки, показывающее списки

Также обратите внимание , что метка времени и размер файла backup.dbразличны в dirи ls -lвыход.

Вкратце: что здесь происходит и как мне это исправить !?

Xophmeister
источник
1
Единственное заметное отличие, которое я вижу, состоит в том, что ls -lон показывает своеобразное количество жестких ссылок на «скрытые» каталоги и файлы ... Я не знаю, почему это так, и как жесткие ссылки даже интерпретируются в NTFS-стране.
Xophmeister
... Просто для подтверждения: я могу получить доступ к данным в «скрытых» файлах из командной строки, используя cat(еще одно ядро ​​GNU). Опять же, однако, родные инструменты Windows (например, type) не могут даже найти файл.
Xophmeister

Ответы:

63

Позвольте мне угадать: программа, которая создала файл, а также утилиты GNU, не работают от имени администратора.

Сначала немного истории. Во времена Windows XP многие программы предполагали, что они всегда будут запускаться с правами администратора и будут писать в таких местах, как C:\Windowsи C:\Program Files (x86)с полным упущением. В Vista Microsoft пыталась сделать меньше администраторов, но обычные пользователи не могут писать в эти места. Им нужны были эти сомнительные программы, чтобы продолжать работать (иначе люди не стали бы обновляться). Итак, они представили магическую функцию под названием виртуализация UAC .

Программы, работающие как обычные пользователи, могут думать, что их записи в важные местоположения были успешными, но в действительности Windows сжала данные в расположении для каждого пользователя. Когда эти программы ищут файлы в каталоге, Windows проверяет, есть ли какие-либо файлы в виртуальном хранилище этого места, и, если это так, добавляет их в список каталогов. (Для Реестра существует эквивалентная функциональность.)

Похоже, что ваша почтовая программа пыталась записать в место, Program Files (x86)когда работала как обычный пользователь. Запись была перенаправлена, поэтому на самом деле она не пошла туда. Программа все еще может видеть это, потому что Windows поддерживает иллюзию для этого. Explorer не видит его, потому что он сообщает операционной системе, что он хорошо себя ведет и не нуждается в перенаправлении. Команда командной строки dirне является программой (это просто особенность cmd.exe), поэтому она также считается "в курсе" и поэтому не отображается файлы совместимости. lsэто программа, которая, очевидно, не в курсе, поэтому она видит файлы совместимости.

Вы найдете свой файл здесь:

%LOCALAPPDATA%\VirtualStore\Program Files (x86)\IMAPSize\backup

Разглядывая VirtualStore, вы можете быть удивлены тем, какие программы плохо себя ведут и нуждаются в сети безопасности виртуализации.

Если вы хотите остановить перенаправление, запустите программу от имени администратора или сохраните свои резервные копии в месте, в которое вы можете писать без прав администратора.

Бен Н
источник
16
И тут я подумал, что знаю Windows. Либо это хорошо сделанная шутка от апреля, либо я узнал кое-что значимое сегодня. спасибо, @Ben N!
Аганю
3
@Aganju Несколько месяцев назад я должен был помочь пользователю Windows создать пару ключей для WinSCP. И они стали невидимыми почти так же, как описано в вопросе. В то время я выдвинул гипотезу объяснения, почти такого же, как приведенное в этом ответе. Я не удосужился проверить свою гипотезу, потому что проблема была решена путем помещения файла в домашний каталог пользователей. Но, по крайней мере, я могу подтвердить, что этот ответ совсем не выглядит для меня шуткой.
kasperd
3
Ну, я буду проклят! Там они все есть. Это странное поведение, даже если оно задумано. Я думал, что у меня ошибка файловой системы! ... Это также объясняет, почему моя первая резервная копия почтового ящика обнаруживается: сначала программа запускалась из установщика («Хотите запустить такой-то и такой-то сейчас?»), Который повысил бы его до наличия прав администратора; тогда как «скрытый» прогон был как у локального пользователя.
Xophmeister
1
@Aganju Полагаю, ты никогда не пользовался Vista. У него была возможность показывать вам виртуализированные файлы в Проводнике; потому что проблема была достаточно распространенной в течение нескольких лет. Ко времени появления Win7 наиболее широко используемое программное обеспечение перестало предполагать, что оно может записывать в подпапки своего установочного каталога; и эта функция была сделана значительно менее заметной или, возможно, полностью удалена в самых последних версиях Windows.
Дэн Нили,
4
@ Xophmeister Это компромисс. Как отмечается в ответе, запись программного обеспечения в собственный каталог приложений до Vista была обычным явлением. Это огромная дыра в безопасности, поэтому ее нужно было решить. Альтернативы были 1) предотвратить запись и сломать все приложения, 2) использовать виртуализацию для сохранения файлов в безопасном месте. 1) очевидно несостоятельна и очень против SOP Microsoft, и в конце концов это приведет только к тому, что все будут запускать все под администратором, как раньше. Это может сбивать с толку, но это все еще, вероятно, лучший вариант. Не пишите в опасные каталоги.
Луаан