23

У меня проблемы с редактированием этого файла в Windows 7:

C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules\FindJNI.cmake

Если бы я изменить его в Cygwin (VI) или TextPad, эти две программы увидеть изменения, поэтому она становится записаны на диск где - то. Но если я "наберу" файл в оболочке DOS cmd, похоже, что файл не был изменен вообще.

Одна вещь, которую я заметил, заключается в том, что в оболочке cmd владельцем являются администраторы, а в оболочке Cygwin bash владельцем является Dan:

C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules>dir /Q FindJ*
 Volume in drive C is Windows7_OS
 Volume Serial Number is 92CA-8707

 Directory of C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

12/30/2011  09:45 AM             1,480 BUILTIN\Administrators FindJasper.cmake
12/30/2011  09:45 AM             7,951 BUILTIN\Administrators FindJava.cmake
12/30/2011  09:45 AM            10,632 BUILTIN\Administrators FindJNI.cmake
12/30/2011  09:45 AM             1,669 BUILTIN\Administrators FindJPEG.cmake
               4 File(s)         21,732 bytes
               0 Dir(s)  132,524,654,592 bytes free


Dan@home /c/Program Files (x86)/CMake 2.8.7/share/cmake-2.8/Modules
$ ls -al FindJ*
-rwx------+ 1 Dan            None 10636 Jan 30 13:57 FindJNI.cmake
-rwx------+ 1 Administrators None  1669 Dec 30 09:45 FindJPEG.cmake
-rwx------+ 1 Administrators None  1480 Dec 30 09:45 FindJasper.cmake
-rwx------+ 1 Administrators None  7951 Dec 30 09:45 FindJava.cmake

Как это может быть? Это как два разных файла с одинаковыми именами в одном каталоге.

3 ответа3

33

Благодаря функциям безопасности, реализованным в Windows Vista (UAC), любая программа без прав администратора, которая пытается записывать в защищенные места, такие как "Program Files", будет перехватывать свои записи и перенаправлять их в альтернативное "удобное для пользователя" место.

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

Википедия утверждает (и я выделил соответствующий раздел):

Приложения, написанные с допущением, что пользователь будет работать с правами администратора, испытывали проблемы в более ранних версиях Windows при запуске с ограниченными учетными записями пользователей, часто из-за того, что они пытались выполнить запись в машинные или системные каталоги (такие как Program Files) или ключи реестра (особенно HKLM). UAC пытается облегчить это с помощью виртуализации файлов и реестра, которая перенаправляет записи (и последующие операции чтения) в расположение пользователя в профиле пользователя. Например, если приложение пытается выполнить запись в «C:\program files\appname\settings.ini», а у пользователя нет прав на запись в этот каталог, запись будет перенаправлена в «C:\Users\username». \AppData \Local \VirtualStore \Program Files \appname\settings.ini ”.

Таким образом, теоретически ваш измененный файл фактически записывается в C:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

Единственный способ обойти это ограничение - полностью отключить UAC, что не рекомендуется по соображениям безопасности.

Лучшее решение заключается в том, что на вашем пути должен быть cmake, и вы должны использовать незащищенное местоположение, например, где-то внутри вашего профиля пользователя.

11

Папка Program Files защищена правами администратора. В Windows XP и более ранних версиях большинство людей все время работали с правами администратора. Многие программы предполагали, что это так, и выполняли всю свою работу в папке Program Files.

Когда Windows Vista была выпущена, они прекратили эту практику, заставив приложения вместо этого использовать:

C:\Users\% Имя пользователя%\AppData

Это сломало много старых приложений. Чтобы старое приложение продолжало использовать только папки администратора, Windows создала виртуальное хранилище, в котором будут храниться измененные файлы. Взгляните на:

C:\Users\% Имя пользователя%\AppData\Local\VirtualStore

Вы найдете свои файлы там. Вы также можете использовать Проводник, открыв папку и нажав кнопку Файлы совместимости в верхней части окна.

0

У меня была похожая проблема, вскоре после перехода на Windows 7 (из XP) я пытался разархивировать файл внутри C:\Program Files и он продолжал выдавать мне ошибку «Отказано в доступе».

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

Чтобы стать владельцем папки: щелкните правой кнопкой мыши папку и перейдите в « Properties , затем перейдите на вкладку « Security », затем нажмите « Advanced , затем вкладку « Owner » и нажмите « Edit . Установите флажок "Заменить владельца на подконтейнеры и объекты", затем выберите нового владельца (например, группу "Администраторы"), затем скажите « OK .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .