Windows 7'de neden bir "Program Files" dosyasını düzenleyemiyorum?


25

Windows 7'de bu dosyayı düzenlemekte sorun yaşıyorum:

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

Bunu Cygwin (vi) veya TextPad'de düzenlersem, bu iki program değişiklikleri görür, bu yüzden bir yere yazılır . Ancak dosyayı bir DOS cmd kabuğuna "yazarsam", dosya hiç değişmemiş gibi görünüyor.

Fark ettim bir şey cmd kabukta, sahibi Yöneticiler, ancak Cygwin'in bash kabukta, sahibi 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

Bu nasıl olabilir? Aynı dizinde aynı ada sahip iki farklı dosya var gibi.


Herhangi bir hata mesajı alıyor musunuz?
ChrisF

Bir çeşit WoW64 klasör yeniden yönlendirmesi olabilir mi (Cygwin 32 bit olduğundan)?
Andrew Lambert,

Yanıtlar:


35

Windows Vista ( UAC ) ile sunulan güvenlik özellikleri nedeniyle , "Program Files" gibi korumalı konumlara yazmaya çalışan herhangi bir Yönetici olmayan program, yazmalarını yakalar ve alternatif bir "kullanıcı dostu" konuma yönlendirir.

Dosyayı yapan program dosyayı görebilecek, ancak diğer programların çoğunda bulunmayacak.

Vikipedi devletler (ve ilgili bölümü vurguladım):

Kullanıcının yönetici ayrıcalıklarıyla çalıştırılacağı varsayımıyla yazılmış uygulamalar, sınırlı kullanıcı hesaplarından çalıştırıldığında Windows'un daha önceki sürümlerinde, genellikle makine geneline veya sistem dizinlerine (Program Dosyaları gibi) veya kayıt defteri anahtarlarına yazmaya çalıştıkları için sorun yaşadı. (özellikle HKLM). UAC , yazmayı (ve ardından okuyanları) kullanıcının profilinde kullanıcı başına bir konuma yönlendiren Dosya ve Kayıt Sanallaştırma'yı kullanarak hafifletmeye çalışır . Örneğin, bir uygulama “C: \ program files \ appname \ settings.ini” ye yazmaya çalışırsa ve kullanıcı bu dizine yazma iznine sahip değilse, yazma işlemi “C: \ Users \ username” e yönlendirilir. \ AppData \ Local \ VirtualStore \ Program Files \ appname \ settings.ini ”.

Yani teoride , değiştirdiğiniz dosya aslındaC:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

Bu kısıtlamanın etrafındaki tek yol , güvenlik nedeniyle önerilmeyen UAC'yi tamamen devre dışı bırakmaktır .

En iyi çözüm, gerçekte yolunuza girmiş olması ve kullanıcı profilinizin içinde olduğu gibi korumasız bir konum kullanmasıdır.


Teşekkürler. Çok kafa karıştırıcı. Yolumda cmake yapmak (ya da olmasın) nasıl bir fark yaratır? Sorun şu ki, bu cmake dosyasında hata ayıklamaya çalışıyorum, çünkü düzgün çalışmıyor.
Dan

Üzgünüm, dosyaya karşı cmake yaptığınızı sanıyordum. Dosyanın ne olduğunu kullanmak için dosyayı başka bir yere yazmanız gerekecek, sonra dosyayı kopyalamak için Explorer’ı kullanabilmelisiniz, bundan sonra ne yapmak istediğinizi olduğundan emin olmak isteyen bir UAC isteminde bulunmalısınız. Dosyanızın üzerine yazılmalıdır. Önemli olan, UAC uyumlu programları (Explorer gibi) bu konumlardaki dosyaları kopyalamak / yazmak için kullanabilmenizdir.
Mokubai

UAC'yi devre dışı bırakmak, etraftaki tek iş değildir . Sadece sorunlar neden olan dosya / dizin vermek gerekir Modifyizinleri Usersdosya / klasör güvenlik sekmesine giderek kullanıcı grubu.
Scott Chamberlain

Lol bu davranış tuhaf! Sahip olduğum çok garipliği açıklıyor. Teşekkürler.
Jez

13

Program Files klasörü Yönetici hakları ile korunmaktadır. Windows XP ve daha önceki sürümlerde çoğu kişi her zaman Yönetici olarak çalışıyordu. Birçok program bunun böyle olduğunu varsayıyordu ve bütün çalışmalarını Program Files klasöründe yaptı.

Windows Vista piyasaya sürüldüğünde, uygulamaları kullanmaya zorlayarak bu uygulamayı durdurdular:

C: \ Users \% kullanıcı adı% \ AppData

Bu, birçok eski uygulamayı bozdu. Eski uygulamanın yalnızca Yönetici klasörlerini kullanmaya devam etmesine izin vermek için, Windows değiştirilmiş dosyaları saklamak için sanal bir mağaza oluşturdu.

C: \ Users \% kullanıcı adı% \ AppData \ Local \ VirtualStore

Dosyalarınızı orada bulacaksınız. Explorer'ı, klasörü açıp pencerenin üstündeki Uyumluluk dosyaları düğmesine basarak da kullanabilirsiniz .


Teşekkürler. Bu (ve kabul edilen cevap) sahip olduğum çok gizemli bir problemi çözdü. Şimdi açıklandığı için mükemmel mantıklı. Cevabınız kısa ve doğrudan konuya. +1 Teşekkürler!
ridgerunner

0

Benzer bir problemim vardı, Windows 7'ye taşındıktan kısa süre sonra (XP'den) İçindeki bir dosyayı açmaya çalışıyordum C:\Program Filesve bana bir Erişim Reddedildi hatası verdi.

Çok güreşimden sonra, yöneticilerin Tam Erişim'e izin vermek için izinleri değiştirmeden önce tüm klasöre sahip çıkmam gerektiğine karar verdim - bence haklı olarak sahip olması gereken.

Bir klasörün sahipliğini almak için: klasörü sağ tıklayın ve Propertiesardından Securitysekmeyi tıklayın, ardından tıklayın Advanced, ardından Ownersekmeyi tıklayın ve tıklayın Edit. "Alt taşıyıcılardaki ve nesnelerdeki sahibi değiştir" seçeneğini işaretleyin, ardından yeni sahibi seçin (örneğin, "Yöneticiler" grubu) ve ardından söyleyin OK.


Mülkiyet almanıza gerek yok. Sadece Usersgruba değişiklik izni verin. Ancak gerektiğini değil program dosyaları tam erişim verilecektir. Herkesin yönetici olma varsayılanı kötü bir tasarım tercihiydi ve Vista'da düzeltmeyi denediler.
Scott Chamberlain
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.