web-dev-qa-db-ja.com

Windows 7で「Program Files」ファイルを編集できないのはなぜですか?

Windows 7でこのファイルを編集できません。

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

Cygwin(vi)またはTextPadで編集すると、これらの2つのプログラムが変更を認識し、ディスクに書き込まれますどこか。しかし、DOSコマンドシェルでファイルを「入力」すると、ファイルはまったく変更されていないように見えます。

私が気づいたことの1つは、cmdシェルでは所有者がAdministratorsですが、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

どうすればいいの?同じディレクトリに同じ名前の2つの異なるファイルがあるようなものです。

25
Dan

Windows Vistaで導入されたセキュリティ機能( [〜#〜] uac [〜#〜] )により、「Program Files」などの保護された場所に書き込もうとする非管理者プログラムは、書き込みを取得しますキャッチされ、別の「ユーザーフレンドリー」な場所にリダイレクトされます。

ファイルを作成したプログラムはファイルを表示できますが、他のほとんどのプログラムは表示できません。

ウィキペディアの状態 (そして私は関連するセクションをハイライトしました):

ユーザーが管理者権限で実行されることを想定して作成されたアプリケーションは、限られたユーザーアカウントから実行すると、以前のバージョンのWindowsで問題が発生しました。 (特にHKLM)。 UACは、File and Registry Virtualizationを使用してこれを軽減しようとします。これにより、書き込み(およびその後の読み取り)がユーザーのプロファイル内のユーザーごとの場所にリダイレクトされます。たとえば、アプリケーションが「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に書き込まれます

この制限を回避する唯一の方法は、完全に ACを無効にする にすることです。これは、セキュリティ上の理由からお勧めできません。

最善の解決策は、実際にパスにcmakeがあり、ユーザープロファイル内など、保護されていない場所を使用していることです。

35
Mokubai

Program Filesフォルダーは、管理者権限によって保護されています。 Windowsでは、XP以前のバージョンでは、ほとんどの人が常に管理者として実行されていました。多くのプログラムがこれに該当すると想定し、すべての作業をProgram Filesフォルダで行いました。

Windows Vistaがリリースされたとき、彼らはこの慣行をやめ、代わりにアプリケーションに次のものを使用するよう強制しました。

C:\ Users \%Username%\ AppData

これは多くの古いアプリケーションを壊しました。古いアプリケーションが管理者専用フォルダを引き続き使用できるようにするために、Windowsは、変更されたファイルを保持する仮想ストアを作成しました。

C:\ Users \%Username%\ AppData\Local\VirtualStore

そこにファイルが見つかります。フォルダーを開き、ウィンドウの上部にある互換性ファイルボタンを押して、エクスプローラーを使用することもできます。

13
Hand-E-Food

同様の問題があり、Windows 7に(XPから)移行した直後にC:\Program Files内のファイルを解凍しようとすると、アクセス拒否エラーが発生し続けました。

多くの取り組みの結果、Administratorsグループにフルアクセスを許可するためのアクセス許可を変更する前に、フォルダー全体の所有権を取得する必要があることに気付きました。

フォルダの所有権を取得するには、フォルダを右クリックしてPropertiesに移動し、次にSecurityタブをクリックしてからAdvancedをクリックし、次にOwnerタブをクリックし、Editをクリックします。 [サブコンテナとオブジェクトの所有者を置き換える]をオンにしてから、新しい所有者(「管理者」グループなど)を選択し、OKと言います。

0
Sam P