Tại sao tôi không thể chỉnh sửa tập tin Chương trình tập tin Tiếng Đức trên Windows 7?


25

Tôi gặp sự cố khi chỉnh sửa tệp này trên Windows 7:

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

Nếu tôi chỉnh sửa nó trong Cygwin (vi) hoặc TextPad, hai chương trình đó sẽ thấy các thay đổi, vì vậy nó sẽ được ghi vào đĩa ở đâu đó . Nhưng nếu tôi "gõ" tệp trong shell cmd của DOS, có vẻ như tệp đã không bị thay đổi.

Một điều tôi nhận thấy là trong shell cmd, chủ sở hữu là Quản trị viên, nhưng trong shell bash của Cygwin, chủ sở hữu là 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

Làm sao có thể? Giống như có hai tệp khác nhau có cùng tên trong cùng một thư mục.


Bạn có nhận được bất kỳ thông báo lỗi?
ChrisF

Nó có thể là một số loại chuyển hướng thư mục WoW64 (vì Cygwin là 32 bit)?
Andrew Lambert

Câu trả lời:


35

Do các tính năng bảo mật được giới thiệu với Windows Vista ( UAC ), bất kỳ chương trình không phải là Quản trị viên nào cố ghi vào các vị trí được bảo vệ, chẳng hạn như "Tệp chương trình" sẽ bị ghi và chuyển hướng đến vị trí "thân thiện với người dùng" thay thế.

Chương trình tạo tệp sẽ có thể xem tệp, nhưng hầu hết các chương trình khác thì không.

Các tiểu bang Wikipedia (và tôi đã nhấn mạnh phần có liên quan):

Các ứng dụng được viết với giả định rằng người dùng sẽ chạy với các đặc quyền của quản trị viên gặp phải sự cố trong các phiên bản Windows trước đó khi chạy từ tài khoản người dùng bị giới hạn, thường là do họ đã cố ghi vào thư mục toàn máy hoặc hệ thống (như Tệp chương trình) hoặc khóa đăng ký (đáng chú ý là HKLM). UAC cố gắng giảm bớt điều này bằng cách sử dụng Ảo hóa tệp và đăng ký, để chuyển hướng ghi (và các lần đọc tiếp theo) đến vị trí của mỗi người dùng trong hồ sơ người dùng . Ví dụ: nếu một ứng dụng cố ghi vào C C \ \ tệp chương trình \ appname \ settings.ini, và người dùng không có quyền ghi vào thư mục đó, thì ghi sẽ được chuyển hướng đến tên C: \ Users \ tên người dùng \ AppData \ Local \ VirtualStore \ Program Files \ appname \ settings.ini.

Vì vậy, trên lý thuyết, tập tin thay đổi của bạn thực sự được ghi vàoC:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

Cách duy nhất xung quanh hạn chế này là vô hiệu hóa hoàn toàn UAC , không được khuyến nghị vì lý do bảo mật.

Giải pháp tốt nhất là thực sự nên có cmake trong đường dẫn của bạn và sử dụng một vị trí không được bảo vệ, chẳng hạn như ở đâu đó trong hồ sơ người dùng của bạn.


Cảm ơn. Rất bối rối. Làm thế nào có cmake trong đường dẫn của tôi (hoặc không) làm cho bất kỳ sự khác biệt mặc dù? Vấn đề là tôi đang cố gắng gỡ lỗi tệp cmake này, vì nó không hoạt động đúng.
Dan

Xin lỗi, tôi đã giả sử bạn đang chạy cmake với tệp. Để sử dụng bất cứ tập tin nào, bạn sẽ phải ghi nó ở nơi khác, sau đó bạn có thể sử dụng Explorer để sao chép tập tin, bạn sẽ nhận được lời nhắc UAC yêu cầu bạn đảm bảo đây là việc bạn muốn làm và sau đó tập tin của bạn sẽ bị ghi đè. Điều chính là bạn chỉ có thể sử dụng các chương trình nhận biết UAC (như Explorer) để sao chép / ghi tệp vào các vị trí đó.
Mokubai

Vô hiệu hóa UAC không phải là công việc duy nhất xung quanh. Bạn chỉ cần cung cấp tệp / thư mục gây ra sự cố Modifyquyền cho Usersnhóm người dùng bằng cách chuyển đến tab bảo mật của tệp / thư mục.
Scott Chamberlain

LOL hành vi này thật kỳ quái! Nó giải thích rất nhiều điều kỳ lạ mà tôi đã có. Cảm ơn.
Jez

13

Thư mục Tệp Chương trình được bảo vệ bởi quyền Quản trị viên. Trong Windows XP trở về trước, hầu hết mọi người đều chạy với tư cách Quản trị viên mọi lúc. Nhiều chương trình cho rằng đây là trường hợp và đã thực hiện tất cả công việc của họ trong thư mục Tệp chương trình.

Khi Windows Vista được phát hành, họ đã dừng thực hành này, buộc các ứng dụng phải sử dụng thay thế:

C: \ Người dùng \% Tên người dùng% \ AppData

Điều này đã phá vỡ rất nhiều ứng dụng cũ. Để cho phép ứng dụng cũ tiếp tục sử dụng các thư mục chỉ dành cho Quản trị viên, Windows đã tạo một cửa hàng ảo để giữ các tệp đã thay đổi. Hãy xem:

C: \ Người dùng \% Tên người dùng% \ AppData \ Local \ VirtualStore

Bạn sẽ tìm thấy các tập tin của bạn ở đó. Bạn cũng có thể sử dụng Explorer bằng cách mở thư mục và nhấn nút Tệp tương thích ở đầu cửa sổ.


Cảm ơn. Điều này (và câu trả lời được chấp nhận) đã giải quyết một vấn đề rất bí ẩn mà tôi đang gặp phải. Làm cho cảm giác hoàn hảo bây giờ nó được giải thích. Câu trả lời của bạn là ngắn và trực tiếp đến điểm. +1 Cảm ơn!
Ridgerunner

0

Tôi đã gặp một vấn đề tương tự, ngay sau khi chuyển sang Windows 7 (từ XP), tôi đã cố gắng giải nén một tập tin bên trong C:\Program Filesvà nó liên tục gây ra lỗi truy cập từ chối.

Sau nhiều lần vật lộn, tôi thấy rằng tôi phải sở hữu toàn bộ thư mục trước khi tôi có thể thay đổi các quyền để cho phép nhóm Quản trị viên Truy cập đầy đủ, theo ý kiến ​​của tôi, nó phải có.

Để sở hữu một thư mục: nhấp chuột phải vào thư mục và đi đến Properties, sau đó nhấp vào Securitytab, sau đó nhấp Advanced, sau đó là Ownertab và nhấp Edit. Kiểm tra "Thay thế chủ sở hữu trên các nhà cung cấp phụ và đối tượng", sau đó chọn chủ sở hữu mới (ví dụ: nhóm "Quản trị viên"), sau đó nói OK.


Ugh, bạn không cần phải có quyền sở hữu. Chỉ cần cung cấp cho Usersnhóm sửa đổi quyền. Tuy nhiên, bạn không nên được cấp quyền truy cập đầy đủ vào các tập tin chương trình. Mặc định của tất cả mọi người là quản trị viên là một lựa chọn thiết kế tồi và họ đã cố gắng sửa nó trong Vista.
Scott Chamberlain
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.