JavaFX SDK をアンインストールしたら Excel が起動しなくなった場合の対処方法

以前の JDK についてきた JavaFX SDK をアンインストールしたところ、Excel を開こうとすると

lexicon (XLLEX.DLL) が見つからないか、または壊れています。

みたいなエラーが表示されて起動できないようになってしまった。ネットで検索しても、「OS を再インストールするしかないですね」みたいなのばっかり引っかかって途方に暮れていた。
やむなく放置していたんだけど、今日やっと対処方法を見つけたので、メモしておく。

対処方法

最初に結論を書いておくと、以下の手順で解決できた。

  1. 「システムの復元」を使って、エラーが起きるようになった前、つまり JavaFX SDK をアンインストールする前の状態に戻す。
  2. レジストリエディタを使って、以下のキーを探す。
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData
  3. 上記 (2.) のキーの下に、ユーザごとのサブキーが存在する。サブキーの名前は普段目にするユーザ名ではなく、SID と呼ばれる識別子になっている。例えば以下のような感じ。いくつかあると思うので、その中から現在ログインしているユーザの SID (後述) に対応するサブキーを特定する。
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-1-11-1111
  4. 上記 (3.) のキー配下をまるごとバックアップする。*.reg 形式と *.txt 形式が選べるが、*.reg 形式で。
  5. JavaFX SDK をアンインストールする。
  6. 上記 (4.) でバックアップした *.reg ファイルをエクスプローラでダブルクリックし、バックアップした内容をレジストリに入れ直す。
  7. Excel を開いてみて、正常に起動することを確認する。
  8. もう二度と JavaFX SDK はインストールしないと心に決める。

上記の手順のうち、ログインユーザの SID を調べる方法については、下記のページが参考になりそう。

なりそう、と書いたのは、僕はこの手順を使わずにすませてしまったためだけど、まぁたぶんこれで大丈夫でしょう。
なお、上記の手順とは違う方法で解決した、という話が下記の質問サイトにあった。僕の環境にはあてはまらなかったけど、念のため紹介しておく。

犯人を突きとめろ!

以下は、解決までにやったことの記録。
このエラーが起きてから XLLEX.DLL というファイルを探すと、Excel をインストールしたところにファイル自体はちゃんと存在していた。
僕の環境では JavaFX SDK をアンインストールするとエラーが起きるようになり、「システムの復元」でアンインストール前に戻すと普通に起動できるようになる、という状態だったんだけど、その前後でファイルを比較しても特に変わっている様子はなかった。
ということは、怪しいのはレジストリ
試しにレジストリエディタを使ってレジストリ全体のバックアップを取り、前後で diff を取ってみたんだけど、変更箇所が多すぎて何が悪いのかわからない。そこで今日はこちらのフリーソフトを使ってみた。

レジストリ全体のスナップショットを好きなタイミングで保存しておき、後で比較することができる、というもの。diff で見るのと違って、差異をツリー形式で表示してくれるので、どこがどう変わったのかわかりやすかった。
その結果、JavaFX SDK のアンインストール時に、消してはいけないデータが消されている、ということがわかった。具体的には、レジストリのうち以下のキー配下にあったデータが、JavaFX SDK のアンインストール後にばっさりなくなっていた。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\

通常の状態では、このキーの下に Components とか Products とかいったサブキーがある。よくわからないけど、名前から察するにインストール済みのコンポーネント (部品) や製品が登録される場所なんだろう。
JavaFX SDK のアンインストール時に、なぜか関係ないコンポーネントや製品の情報まで削除されてしまい、Excel が起動時に参照しようとして「あれっ!? ない!!」ということになっていたのが、冒頭に書いたエラーの正体だったようだ。
余談だけど、上記のレジストリキーをググったら、自分が昔書いたメモが引っかかってビックリした。その時起きていたのも「Office が起動しなくなった」という現象で、原因は今回と同じレジストリキーの権限設定が不正になったためだった。ふむー。

www.toyfish.blog

単独犯? 黒幕がいる?

以上で手元の問題は解決したんだけど、本当に JavaFX SDK アンインストーラが悪いのか、ということについては、実は全然自信がない。
僕の環境では、JDKJRE をアンインストールしても Excel はピンピンしていて、JavaFX SDK をアンインストールした途端にエラーが起きる状態だったので、少なくとも引き金を引いた実行犯が JavaFX SDKアンインストーラなのは間違いない。そういえば JavaFX SDKインストーラって JDK とか JREインストーラと外見が違うので、JavaFX SDK のやつだけ別の方式になっていて、そこに何かバグがあるのでは、と思ってもいる。
ただ、ググっても同じようなことを書いている人が他に見つからなかったので、何か僕の環境がおかしいのかもしれない。あるいは、内部で呼び出しているであろう Microsoft Installer のバグで、何か特定の条件でレジストリから余計なデータまで消してしまうのかもしれない。