Чому я не можу редагувати файл «Файли програм» у Windows 7?


25

У мене проблеми з редагуванням цього файлу в Windows 7:

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

Якщо я редагую це в Cygwin (vi) або TextPad, ці дві програми бачать зміни, тому вони записуються кудись на диск . Але якщо я "введіть" файл в оболонці cmd DOS, схоже, що файл взагалі не змінено.

Одне, що я помітив, - це те, що в оболонці 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

Як це може бути? Це все одно, що в одному каталозі є два різних файли з тим самим іменем.


Чи отримуєте ви повідомлення про помилки?
ChrisF

Чи може це бути якесь перенаправлення папок WoW64 (оскільки Cygwin 32-бітний)?
Ендрю Ламберт

Відповіді:


35

Завдяки функціям безпеки, введеним у Windows Vista ( UAC ), будь-яка програма, яка не працює адміністратором, яка намагається записати на захищені місця, такі як "Файли програм", буде записувати їх і перенаправляти на альтернативне "зручне для користувачів" місце.

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

У Вікіпедії зазначено (і я виділив відповідний розділ):

Програми, написані з припущенням, що користувач буде працювати з правами адміністратора, виникли проблеми в попередніх версіях Windows, коли вони запускаються з обмежених облікових записів користувачів, часто тому, що вони намагалися записувати в загальномашинні або системні каталоги (наприклад, програмні файли) або ключі реєстру (особливо HKLM). UAC намагається полегшити це за допомогою віртуалізації файлів та реєстрів, яка перенаправляє записи (та наступні читання) на місце користувача в профілі користувача . Наприклад, якщо програма намагається записати на "C: \ програмні файли \ ім'я програми \ 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 на вашому шляху та використовувати незахищене місце, наприклад, десь усередині вашого профілю користувача.


Спасибі. Дуже заплутано. Як би маючи cmake на моєму шляху (чи ні) все-таки змінилося? Проблема в тому, що я намагаюся налагодити цей файл cmake, оскільки він не працює належним чином.
День

Вибачте, я припускав, що ви використовуєте cmake проти файлу. Щоб використовувати будь-який файл, вам доведеться записати його в іншому місці, тоді ви повинні мати можливість використовувати Explorer для копіювання файлу, вам слід отримати підказку UAC з проханням переконатися, що це те, що ви хочете зробити, і після цього ваш файл повинен бути перезаписаний Головне, що ви можете використовувати лише програми, обізнані з UAC (наприклад, Explorer) для копіювання / запису файлів у цих місцях.
Мокубай

Відключення UAC - не єдина робота. Вам просто потрібно надати файл / каталог, який викликає проблеми Modifyдозволу для Usersгрупи користувачів, перейшовши на вкладку безпеки файлу / папки.
Скотт Чемберлен

LOL така поведінка химерна! Це пояснює багато дивацтва, яке я мав. Спасибі.
Їжак

13

Папка програмних файлів захищена правами адміністратора. У Windows XP і раніше більшість людей постійно працювали адміністратором. Багато програм припускали, що це було так, і всю свою роботу виконували в папці Файли програм.

Коли Windows Vista була випущена, вони припинили цю практику, змусивши програми замість цього використовувати:

C: \ Користувачі \% Ім'я користувача% \ AppData

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

C: \ Користувачі \% Ім'я користувача% \ AppData \ Local \ VirtualStore

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


Спасибі. Ця (і прийнята відповідь) вирішила дуже таємничу проблему, яку я мав. Має ідеальний сенс зараз, коли це пояснюється. Ваша відповідь коротка і безпосередньо до суті. +1 Дякую!
егергернер

0

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

Після багатої боротьби я виявив, що мені довелося взяти право власності на всю папку, перш ніж я міг змінити дозволи, щоб дозволити групі адміністраторів повний доступ - що, на мою думку, воно повинно справедливо мати.

Для того, щоб взяти право власності на папку: клацніть правою кнопкою миші на папці та перейдіть до Properties, потім натисніть на Securityвкладку, потім клацніть Advanced, потім Ownerвкладку та клацніть Edit. Поставте прапорець "Замінити власника на підконтейнери та об'єкти", потім виберіть нового власника (наприклад, групу "Адміністратори"), а потім скажіть OK.


Фу, вам не потрібно брати право власності. Просто дайте Usersдозволу для зміни групи. Однак вам не слід надавати повний доступ до програмних файлів. За замовчуванням усіх, хто є адміністратором, був поганий вибір дизайну, і вони намагалися виправити це у Vista.
Скотт Чемберлен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.