karubabuの日記

タイトルに解決と書いているものがあるけれど、別に付いていない物は解決していないというわけではないです。つまるところ記事を書いた後に解決してちょっと嬉しかったので付けました。

CorvusSKK config.xml 編集できない 何故 検索

ctfmon.exeが起動されると突如編集できなくなるconfig.xmlをなんとか編集できる状態にした話
この方法を取るとスタートアップに設定したスクリプトを実行しないユーザは漏れなくnihonngo ga utena i になるので注意して

なにがあった

%AppData%\CorvusSKKにあるconfig.xmlがCorvusSKKの設定アプリケーションやメモ帳から編集できなくなっていた
いつから編集できなくなっていたのかも分からない
一度config.xmlを削除してみようとすると、"Systemによって使用されているので削除できません。"というメッセージが出る
del config.xmlをしても"ファイルを削除できません。別プロセスが使用中です"と言われる
Process Monitorを使用して見てみると、config.xmlを編集する時にsharing violationが起きている
Windows Sysinternals とは | マイクロソフト 技術情報のproexp64.exeを使って(管理者権限で実行)使用しているプロセスを見るとSystem(PID4)がずっとconfig.xmlを使っているらしい
再起動してログインした直後20秒間程度はconfig.xmlを編集できる時間帯がある

なにをした

win+RでTaskschd.mscを叩いてタスクスケジューラを起動
Microsoft\Windows\TextServiceFrameworkにあるMsCtfMonitorを無効にする
再起動すると日本語が使えなくなる代わりにconfig.xmlが編集可能になる
ここでwin+Rからctfmon.exeを起動すると日本語が使える代わりにconfig.xmlが編集不可能になる

再起動して、先にconfig.xmlを削除してからctfmon.exeを起動し、別の場所からconfig.xmlをコピペしてした場合、日本語が使えるうえにconfig.xmlが編集可能になる
なのでこれをスタートアップにやるスクリプトを書く

rm C:\Users\admin\AppData\Roaming\CorvusSKK\config.xml
ctfmon.exe
timeout /T 3
cp C:\Users\admin\AppData\Roaming\CorvusSKK\cfg\config.xml C:\Users\admin\AppData\Roaming\CorvusSKK\config.xml

具体的にはこんな感じでtimeoutは必要かどうかわからないけれど気分で入れた
後は適当なタイミングでconfig.xmlをバックアップと同期するタスクスケジューラを書けばよいと思う

おわりに

解決策が分かってよかった(粉ミルク)
他のCorvusSKKを使っている人はそんな問題が発生していないのでおま環な様なのだけれど原因が全くわからない
正直そこまでconfig.xmlを編集するわけではないから再起動したら急いで編集するくらいのやつでも良かった
気にいらないので頑張ったけれども

どうやってタスクスケジューラからMsCtfMonitorを削除すればconfig.xmlが編集可能になるのか気がついたのか

運だった
全てを諦め、寝て起きると何故かコンピュータのCPU使用率が100%になっていた
適当に調べてみるとtask schedulerがSystem管轄で死ぬ程頑張っている
現状起動しているtaskを調べるとMsCtfMonitorしかなかったので止めた
日本語が打てなくなる代わりにconfig.xmlが編集可能になっていることに気がついた