もう何度目だかわからないけど、また同じことでハマったので日記。
Windows Vistaや7に、ApacheやMySQLを入れたときのトラブル。
デフォルトでは C:\Program Files\ 以下にインストールされ、設定ファイル(my.iniとかhttpd.conf)も、C:\Program Files\ 以下に入る。
これらの設定ファイルをメモ張で編集するなら問題無い。問題が発生するのは、古いエディタ。manifestに
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo>
って書かれてないエディタ。
こういうエディタで編集すると、C:\Program Files\ 以下のファイルには書き込む権限が無いのに、書き込めたように見えてしまう。実際には、C:\Program Files\ 以下のファイルは更新されずに、%LOCALAPPDATA%\VirtualStore\Program Files\ 以下にファイルが出力されてる。
面白いことに古いエディタで、C:\Program Files\ 以下のファイルを読み込むと、VirtualStore 以下のファイルが優先的に読み込まれてしまうので、ユーザから見ると C:\Program Files\ 以下のファイルが正常に更新できたように見えてしまう。(ファイルを読み込むアプリも仮想化が有効になっていれば、同じファイルを読みにいくので大きな問題にはならないけど、ApacheやMySQLサーバは仮想化が無効になっているので、本物のファイルを読みに行くから問題が起こる...)
manifestでlevel="asInvoker"にしておけばこの動作が無効になるので、期待通りに「アクセス拒否」となって保存が失敗するので安心。
ちなみに、タスクマネージャで「UACの仮想化」というカラムがこれに対応してるっぽいので「かれこれ5年くらいエディタをアップデートしてない...」って人は一度見ておいたほうがいいかも。
あと、アドレスバーから %LOCALAPPDATA%\VirtualStore\Program Files\ を開いて、ファイルが出力されてないか確認するとか。