Почему Windows 7 причудливо представляет две разные версии одного и того же файла?

248
Jez

Я наткнулся на то, что я считаю довольно странным поведением Windows 7 (это может относиться и к более поздним версиям Windows, но я тестирую на Win7) для файлов в определенных местах, и я не могу найти какую-либо информацию об этом в Google, поэтому мне было интересно, может ли кто-нибудь, кто знает о внутренностях Windows, объяснить мне это.

Таким образом, в основном, это поведение проявляется для файлов в определенных каталогах. Я не уверен, какие именно, но он, кажется, включает в себя некоторые каталоги Program Files (x86); в целях моего тестирования я использовал каталог установки для Europa Universalis 3, который является Program Files (x86)\Paradox Interactive\Europa Universalis III.

Это поведение относится к файлам, уже находящимся в каталоге, но для создания чистой воспроизводимой демонстрации я начал с создания файла text.txtна рабочем столе. Файл содержал текст:

Hello world! 

Мне нравится использовать EditPad Lite 5.4.0 для моего основного текстового редактора (да, я знаю, что он старый, но я привык к нему), но у меня также установлен Vim для Windows 8.0.586. Когда я открываю файл в одном из них, я вижу один и тот же текст, а когда я редактирую текст в обоих, обе программы видят один и тот же отредактированный текст. Все идет нормально.

Я копирую файл в Program Files (x86)\Paradox Interactive\Europa Universalis IIIи получаю запрос на доступ администратора, чтобы иметь возможность скопировать файл, что я разрешаю. Вот тут и начинается странность. Я открываю этот скопированный файл в EditPad Lite, добавляю текст и сохраняю (файл не отображается только для чтения):

Hello world! Edited with EditPad Lite. 

Затем я открываю файл с помощью Vim, и Vim показывает его старую версию:

Hello world! 

Я пытаюсь отредактировать и сохранить, но Vim видит этот файл только для чтения! Поэтому я открываю Vim от имени администратора, редактирую файл и сохраняю:

Hello world! Edited with Vim. 

Когда я снова открываю файл с помощью EditPad Lite, я вижу версию файла EditPad! Итак, теперь у нас есть 2 версии файла, которые я буду называть «версией EditPad» и «версией Vim».

Версия "EditPad" (НЕ только для чтения):

Hello world! Edited with EditPad Lite. 

Версия "Vim" (только для чтения):

Hello world! Edited with Vim. 

Даже перезагрузка ничего не меняет, так что это не похоже на кэширование памяти в Windows; он фактически сохраняет эти 2 разные версии файла на диск! После дальнейших экспериментов я определил, что разные программы, похоже, имеют доступ к разным версиям файла:

"Vim" версия файла:

  • Vim 8.0.586
  • Vim 8.0.586 как администратор
  • 7-Zip 16.04 (64-разрядная версия)
  • проводник Виндоус
  • Блокнот для Windows 7

Версия файла "EditPad":

  • EditPad Lite 5.4.0
  • Европа Универсалис 3
  • Блокнот Windows XP

Что на Земле делает Windows 7 здесь? Почему он представляет две разные версии файла, одна из которых доступна только для чтения, а другая нет? Мое предположение состоит в том, что используются два разных системных вызова, и Windows 7 представляет разные версии файла для разных вызовов, или, возможно, 64-разрядные программы видят одну версию файла, а 32-разрядные видят другую версию? Кто-нибудь может объяснить это и задокументировано ли это поведение где-нибудь?

1
Кажется связанным: https://superuser.com/questions/384107/why-cant-i-edit-a-program-files-file-on-windows-7/384116#384116 Mokubai 6 лет назад 3
Спасибо LOL, "Виртуализация файлов и реестра" действительно, кажется, является причиной этой странности. О хаки, которые Microsoft взяла на себя ради обратной совместимости ... Jez 6 лет назад 0
Хотя есть одна вещь, которая не объясняется этим: когда я открываю файл с помощью Vim, и я * не * работаю от имени администратора, я все равно вижу не перенаправленную версию файла. Почему это? Разве Windows не должна перенаправлять Vim на версию без прав администратора? Jez 6 лет назад 0
VIM вполне может быть «осведомлен об UAC» и в результате не быть перехваченным и перенаправленным. Mokubai 6 лет назад 0
Но на самом деле было бы более полезно, если бы он * представил * перенаправленную версию; это будет отражать то, что увидят другие приложения, не запущенные администратором. Jez 6 лет назад 0
«Почему он представляет две разные версии файла, одна из которых доступна только для чтения, а другая нет?» - У вас есть два файла в двух разных местах. Это сделано для приложения без вывода сообщений, потому что приложение не может изменить рассматриваемый файл, и было изменением того, как Windows позволяет приложению что-то делать. Это было сделано, когда была выпущена Vista Ramhound 6 лет назад 0

0 ответов на вопрос