以前の JDK についてきた JavaFX SDK をアンインストールしたところ、Excel を開こうとすると
lexicon (XLLEX.DLL) が見つからないか、または壊れています。
みたいなエラーが表示されて起動できないようになってしまった。ネットで検索しても、「OS を再インストールするしかないですね」みたいなのばっかり引っかかって途方に暮れていた。
やむなく放置していたんだけど、今日やっと対処方法を見つけたので、メモしておく。
最初に結論を書いておくと、以下の手順で解決できた。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-1-11-1111
上記の手順のうち、ログインユーザの SID を調べる方法については、下記のページが参考になりそう。
なりそう、と書いたのは、僕はこの手順を使わずにすませてしまったためだけど、まぁたぶんこれで大丈夫でしょう。
なお、上記の手順とは違う方法で解決した、という話が下記の質問サイトにあった。僕の環境にはあてはまらなかったけど、念のため紹介しておく。
以下は、解決までにやったことの記録。
このエラーが起きてから XLLEX.DLL というファイルを探すと、Excel をインストールしたところにファイル自体はちゃんと存在していた。
僕の環境では JavaFX SDK をアンインストールするとエラーが起きるようになり、「システムの復元」でアンインストール前に戻すと普通に起動できるようになる、という状態だったんだけど、その前後でファイルを比較しても特に変わっている様子はなかった。
ということは、怪しいのはレジストリ。
試しにレジストリエディタを使ってレジストリ全体のバックアップを取り、前後で diff を取ってみたんだけど、変更箇所が多すぎて何が悪いのかわからない。そこで今日はこちらのフリーソフトを使ってみた。
レジストリ全体のスナップショットを好きなタイミングで保存しておき、後で比較することができる、というもの。diff で見るのと違って、差異をツリー形式で表示してくれるので、どこがどう変わったのかわかりやすかった。
その結果、JavaFX SDK のアンインストール時に、消してはいけないデータが消されている、ということがわかった。具体的には、レジストリのうち以下のキー配下にあったデータが、JavaFX SDK のアンインストール後にばっさりなくなっていた。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>
通常の状態では、このキーの下に Components とか Products とかいったサブキーがある。よくわからないけど、名前から察するにインストール済みのコンポーネント (部品) や製品が登録される場所なんだろう。
JavaFX SDK のアンインストール時に、なぜか関係ないコンポーネントや製品の情報まで削除されてしまい、Excel が起動時に参照しようとして「あれっ!? ない!!」ということになっていたのが、冒頭に書いたエラーの正体だったようだ。
余談だけど、上記のレジストリキーをググったら、自分が昔書いたメモ (id:sardine:20091210) が引っかかってビックリした。その時起きていたのも「Office が起動しなくなった」という現象で、原因は今回と同じレジストリキーの権限設定が不正になったためだった。ふむー。
以上で手元の問題は解決したんだけど、本当に JavaFX SDK アンインストーラが悪いのか、ということについては、実は全然自信がない。
僕の環境では、JDK や JRE をアンインストールしても Excel はピンピンしていて、JavaFX SDK をアンインストールした途端にエラーが起きる状態だったので、少なくとも引き金を引いた実行犯が JavaFX SDK のアンインストーラなのは間違いない。そういえば JavaFX SDK のインストーラって JDK とか JRE のインストーラと外見が違うので、JavaFX SDK のやつだけ別の方式になっていて、そこに何かバグがあるのでは、と思ってもいる。
ただ、ググっても同じようなことを書いている人が他に見つからなかったので、何か僕の環境がおかしいのかもしれない。あるいは、内部で呼び出しているであろう Microsoft Installer のバグで、何か特定の条件でレジストリから余計なデータまで消してしまうのかもしれない。
とあるはてなユーザさんがJavaFXのエントリをたくさん書いているので2になる前にちょっと記事を読んだっきりで放置していたJavaFXに手をだすところでした。
と思ったら関係ないかも知れないなんて。
そもそも試そうにもOfficeが入ってませんでした。悪しからず。
長文失礼しました。# 句読点が無いのはr
本文中にも書いたとおり、他の人が同じ目に遭ってないようなので、環境の問題だったんだと思います。
そういう意味で、タイトルをどうするかかなり悩みましたが、最終的には起きたことを素直に書いておくことにした次第です。
ところで、Stew の次期版は、きっと JavaFX を使ってぬるぬる動く次世代 JDBC クライアントになるんですね。ありがたやありがたや……。
それに句読点じゃなくて句点だし、句点が無いのは一息にしゃべっている感じを表しています。
と、またどうでも良いことを書いてしまいました。すみません。
結局、JavaFX2インストールしてみました。
開発はビルドパスにJavaFXのライブラリを1つ設定するだけでできるんですね。
(あまり知りませんがSWTに似ているような気がします。)
ですので、JavaFX版Stewは外付け(UIの追加)で単純なのを作ってみるかもしれません。
ただ、「次世代〜」にはならないかと思います...
楽しみです。
あと、落ち着いて考えてみたのですが、ないのは句点じゃなくて読点だと思います。
そんな、間違えるわけないじゃないですか〜>読点
...間違えてる!?
レジストリの壊れ方にも、環境ごとに差があるのかもしれないですね。