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つの異なるファイルがあるようなものです。
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があり、ユーザープロファイル内など、保護されていない場所を使用していることです。
Program Filesフォルダーは、管理者権限によって保護されています。 Windowsでは、XP以前のバージョンでは、ほとんどの人が常に管理者として実行されていました。多くのプログラムがこれに該当すると想定し、すべての作業をProgram Filesフォルダで行いました。
Windows Vistaがリリースされたとき、彼らはこの慣行をやめ、代わりにアプリケーションに次のものを使用するよう強制しました。
C:\ Users \%Username%\ AppData
これは多くの古いアプリケーションを壊しました。古いアプリケーションが管理者専用フォルダを引き続き使用できるようにするために、Windowsは、変更されたファイルを保持する仮想ストアを作成しました。
C:\ Users \%Username%\ AppData\Local\VirtualStore
そこにファイルが見つかります。フォルダーを開き、ウィンドウの上部にある互換性ファイルボタンを押して、エクスプローラーを使用することもできます。
同様の問題があり、Windows 7に(XPから)移行した直後にC:\Program Files
内のファイルを解凍しようとすると、アクセス拒否エラーが発生し続けました。
多くの取り組みの結果、Administratorsグループにフルアクセスを許可するためのアクセス許可を変更する前に、フォルダー全体の所有権を取得する必要があることに気付きました。
フォルダの所有権を取得するには、フォルダを右クリックしてProperties
に移動し、次にSecurity
タブをクリックしてからAdvanced
をクリックし、次にOwner
タブをクリックし、Edit
をクリックします。 [サブコンテナとオブジェクトの所有者を置き換える]をオンにしてから、新しい所有者(「管理者」グループなど)を選択し、OK
と言います。