Program Files内のファイル読み書き検証 Windows 10 の場合
前回はWindows 7での話でした。今回はWindows 10で検証したいと思います。
以前話した内容は「C:¥Program Files (x86)」内のファイルがUAC(ユーザーアカウント制御)の仮想化によって読み書きが特殊な振る舞いをするという話でした。その結果ファイルに書き込めないといった現象が起こります。
結論からいうとWindows 10 でも同じ特殊な振る舞いがされるようです。
前回は32ビット用の「C:¥Program Files (x86)」のみで試しましたが、64ビット用の「C:¥Program Files」でも同様の振る舞いがされます。
今回は以下の64ビット用フォルダを前提として説明します。
上記のような構成のフォルダ「aaa」内のファイル「abcd.efg」に対して、アプリケーションから書き込もうとすると
というコピーファイルが自動で作られて、そちらに変更内容が書き込まれてしまう事があります。
このとき、本来書き込みたかった
のファイルは保護されて変更されません。
この現象はファイル「abcd.efg」に書き込み権限が無いときに起こります。
・Administrator等の書き込み権限があるユーザーである
・書き込むアプリを「管理者として実行」する
以上のいずれかの条件を満たせば、
書き込み時にコピーは作られず、
C:¥Program Files¥aaa¥abcd.efg
へと正しく書き込まれます。
では、VirtualStoreへコピーファイルが作られてしまった場合、
再びアプリケーションからファイルを開いたらどうなるのでしょうか?
C:¥Users¥ユーザー名¥AppData¥Local¥VirtualStore¥Program Files¥aaa¥abcd.efg
のコピーを読み込むのか?
C:¥Program Files¥aaa¥abcd.efg
のオリジナルを読み込むのか?
これはアプリケーションによって挙動が異なり、
1.VirtualStoreへコピーを作るアプリを普通に実行した場合
2.VirtualStoreへコピーを作るアプリを「管理者として実行」した場合
3.VirtualStoreへコピーを作らないアプリの場合
で変化します。
1番めのVirtualStoreへコピーを作るアプリを普通に実行した場合では、
操作でオリジナルのProgram Filesのファイルを開こうとしてもVirtualStoreに存在するコピーが優先され、そちらが読み込まれてしまいます。
(※これはコピーを作成したアプリと、読み込むアプリが異なる場合でもこの現象が起こるようです。
例えば32bit版の秀丸エディタやTeraPadはVirtualStoreへコピーを作るアプリなのですが、32bit版秀丸エディタで書き込みVirtualStoreへコピーファイルがつくられた後、TeraPadで同じファイルを開こうとしたときに読み込まれたのはVirtualStoreのコピーファイルでした)
2番めのVirtualStoreへコピーを作るアプリを「管理者として実行」した場合は、コピーファイルは読み込まれず、C:¥Program Files~内のオリジナルのファイルが読み込まれます。
3番めのVirtualStoreへコピーを作らないアプリも同様で、C:¥Program Files~内のオリジナルのファイルが読み込まれます。
ですのでProgram Files内のファイルに書き込んだのに変更が反映されない・書き込めないといった現象は、次のようなことを行ったときに起こります。
VirtualStoreへコピーを作るアプリで書き込みを行う(管理者として実行せず)
→C:\Program Files内のファイルに書き込まれず、変更されたコピーがVirtualStoreに作成される
その後VirtualStoreへコピーを作らないアプリでファイルを開く
→書き込んだつもりだが実際は変更されていないC:\Program Filesのファイルが読み込まれる
よってこれを防ぐには、
・読み込み・書き込み共にVirtualStoreへコピーを作るアプリを使う
(読み込み・書き込みにはVirtualStoreのコピーファイルが使われる)
・Administratorユーザーもしくは「管理者として実行」として書き込み、読み込むときはVirtualStoreへコピーを作らないアプリで読み込むか、VirtualStoreへコピーを作るアプリの場合には「管理者として実行」して読み込む
(読み込み・書き込みにはC:\Program Files内のファイルが使われる)
・自分で使うだけならばC:\Program Filesにインストールしない
そもそもVirtualStoreへコピーされるといった状況は発生しない。
といった方法で防げるでしょう。
VirtualStoreへコピーを作るアプリ/作らないアプリをどうやって区別するのかですが、これは開いているファイルに対して書き込み権限があるか無いかを正しく認識しているアプリなのかで区別できるでしょう。
VirtualStoreへコピーを作らないアプリ(正しく認識しているアプリ)は、書き込み権限がない状態で書き込みを行おうとすると上書きできないか、ユーザーアカウント制御による管理者としての承認を要求してくるはずです。
個別ユーザーごとに設定ファイルを作るアプリケーションが多くなり、Windows 7時代よりもProgram Files内のファイルを直接操作することはなくなってきました。
VirtualStoreにコピーを作ってしまうアプリも少なくなってきているようです。
ですのでProgram Files内のファイルに反映されない・書き込めないといった現象は今後少なくなっていくと思いますが、古い32bitアプリを使っている場合にはいまだに注意が必要です。
CM
以前話した内容は「C:¥Program Files (x86)」内のファイルがUAC(ユーザーアカウント制御)の仮想化によって読み書きが特殊な振る舞いをするという話でした。その結果ファイルに書き込めないといった現象が起こります。
結論からいうとWindows 10 でも同じ特殊な振る舞いがされるようです。
前回は32ビット用の「C:¥Program Files (x86)」のみで試しましたが、64ビット用の「C:¥Program Files」でも同様の振る舞いがされます。
今回は以下の64ビット用フォルダを前提として説明します。
C:
¥Program Files
¥aaa
~
abcd.efg
~
¥Program Files
¥aaa
~
abcd.efg
~
上記のような構成のフォルダ「aaa」内のファイル「abcd.efg」に対して、アプリケーションから書き込もうとすると
C:¥Users¥ユーザー名¥AppData¥Local¥VirtualStore¥Program Files¥aaa¥abcd.efg
というコピーファイルが自動で作られて、そちらに変更内容が書き込まれてしまう事があります。
このとき、本来書き込みたかった
C:¥Program Files¥aaa¥abcd.efg
のファイルは保護されて変更されません。
この現象はファイル「abcd.efg」に書き込み権限が無いときに起こります。
・Administrator等の書き込み権限があるユーザーである
・書き込むアプリを「管理者として実行」する
以上のいずれかの条件を満たせば、
書き込み時にコピーは作られず、
C:¥Program Files¥aaa¥abcd.efg
へと正しく書き込まれます。
では、VirtualStoreへコピーファイルが作られてしまった場合、
再びアプリケーションからファイルを開いたらどうなるのでしょうか?
C:¥Users¥ユーザー名¥AppData¥Local¥VirtualStore¥Program Files¥aaa¥abcd.efg
のコピーを読み込むのか?
C:¥Program Files¥aaa¥abcd.efg
のオリジナルを読み込むのか?
これはアプリケーションによって挙動が異なり、
1.VirtualStoreへコピーを作るアプリを普通に実行した場合
2.VirtualStoreへコピーを作るアプリを「管理者として実行」した場合
3.VirtualStoreへコピーを作らないアプリの場合
1番めのVirtualStoreへコピーを作るアプリを普通に実行した場合では、
操作でオリジナルのProgram Filesのファイルを開こうとしてもVirtualStoreに存在するコピーが優先され、そちらが読み込まれてしまいます。
(※これはコピーを作成したアプリと、読み込むアプリが異なる場合でもこの現象が起こるようです。
例えば32bit版の秀丸エディタやTeraPadはVirtualStoreへコピーを作るアプリなのですが、32bit版秀丸エディタで書き込みVirtualStoreへコピーファイルがつくられた後、TeraPadで同じファイルを開こうとしたときに読み込まれたのはVirtualStoreのコピーファイルでした)
2番めのVirtualStoreへコピーを作るアプリを「管理者として実行」した場合は、コピーファイルは読み込まれず、C:¥Program Files~内のオリジナルのファイルが読み込まれます。
3番めのVirtualStoreへコピーを作らないアプリも同様で、C:¥Program Files~内のオリジナルのファイルが読み込まれます。
ですのでProgram Files内のファイルに書き込んだのに変更が反映されない・書き込めないといった現象は、次のようなことを行ったときに起こります。
VirtualStoreへコピーを作るアプリで書き込みを行う(管理者として実行せず)
→C:\Program Files内のファイルに書き込まれず、変更されたコピーがVirtualStoreに作成される
その後VirtualStoreへコピーを作らないアプリでファイルを開く
→書き込んだつもりだが実際は変更されていないC:\Program Filesのファイルが読み込まれる
よってこれを防ぐには、
・読み込み・書き込み共にVirtualStoreへコピーを作るアプリを使う
(読み込み・書き込みにはVirtualStoreのコピーファイルが使われる)
・Administratorユーザーもしくは「管理者として実行」として書き込み、読み込むときはVirtualStoreへコピーを作らないアプリで読み込むか、VirtualStoreへコピーを作るアプリの場合には「管理者として実行」して読み込む
(読み込み・書き込みにはC:\Program Files内のファイルが使われる)
・自分で使うだけならばC:\Program Filesにインストールしない
そもそもVirtualStoreへコピーされるといった状況は発生しない。
VirtualStoreへコピーを作るアプリ/作らないアプリをどうやって区別するのかですが、これは開いているファイルに対して書き込み権限があるか無いかを正しく認識しているアプリなのかで区別できるでしょう。
VirtualStoreへコピーを作らないアプリ(正しく認識しているアプリ)は、書き込み権限がない状態で書き込みを行おうとすると上書きできないか、ユーザーアカウント制御による管理者としての承認を要求してくるはずです。
個別ユーザーごとに設定ファイルを作るアプリケーションが多くなり、Windows 7時代よりもProgram Files内のファイルを直接操作することはなくなってきました。
VirtualStoreにコピーを作ってしまうアプリも少なくなってきているようです。
ですのでProgram Files内のファイルに反映されない・書き込めないといった現象は今後少なくなっていくと思いますが、古い32bitアプリを使っている場合にはいまだに注意が必要です。
CM
- 関連記事
-
- Windows 10 で必要な容量
- Linux PCではBluetoothにLDACコーデックが使えるらしい。
- Program Files内のファイル読み書き検証 Windows 10 の場合
- 使い勝手最悪なプリンターがついに壊れたので新調した。
- 低価格な日本語OCRソフトを買ってみたが…