Windows 7で凄く困ったことがあったので、書留。

11/02/12 コマンドあたりが観づらかった&リンク切れてたので少しだけ修正しました。
また、トラックバック入れました。参考先の方、申し訳ございません…(書いた当時はトラックバックのこと全く知らなかった、というか今もあまり知らない)。

●今回の事件。
Windows 7でのセーフモードでの起動は危険極まりないです。
セーフモードでエクスプローラーがクラッシュする

具体的にどうなるかと申しますと。
まずセーフモードで立ち上げてログインした後、すぐにエクスプローラ(フォルダやらをGUIで制御するソフトウェア)とセーフモードヘルプ(セーフモードではこういうことができますよ!っていう説明)が立ち上がります。
まぁ普通なら、ここでヘルプを閉じて、エクスプローラでウイルススキャンなり不要ファイル削除なりドライバをどうのこうのして、通常起動時にはできない操作をします。

ところが、今回の事件では最初のエクスプローラとセーフモードヘルプがあり得ない現象を起こします。
上記リンクで説明されていることが起こります。
エクスプローラが落ちる→エクスプローラ再起動→再び落ちる を繰り返すわけです。ついでにエクスプローラ再起動時に、ヘルプももう一度立ち上がるので、二重に再起動を繰り返します。
(OSが再起動するわけではないので注意。エクスプローラが何度も再起動を繰り返してしまいます)

ここで困ることは、本気で何もできなくなるところにあります。
例えばWindowsキー+Rキーで「ファイル名を指定して実行」を呼び出してもそれが落ちる。
例えば「タスクマネージャ」を開いてもそれが落ちる。
…電源を切るしかなくなります。

●原因
俺のブログ見ても構わんよ。 | Windows 7をセーフモードで起動するとエクスプローラがクラッシュする件
上記が詳しいです。

俺の方でも確認してみたら、やはりMicrosoft IMEにチェックが入ってませんでした。
(もう面倒なのでセーフモードが無事動くかどうかは再確認していません)

また、最上部リンク先では、Microsoftより対策パッチが出ていると明記されています。が、調べてみたらどうやらテスト段階のパッチのようなので…使えるかどうかは大変微妙です。
上記の対策で構わないと思います、今のところ。

●セーフモードからの復旧の方法
ここでは二つに分けます。(後者が大変困ります。俺は後者に陥りました)

・F8キーを使ってセーフモード起動した場合
一度セーフモードを起動した状態では何もできないため、一度電源ボタンを押すなりして電源を落とします。
再度起動し、もう一度F8キー、そこで「通常起動する」を選択すればOKです。それからIMEの設定を見直しましょう。


・MSCONFIGを使ってセーフモード起動した場合

Windows 7 -- MSCONFIGでのセーフモード起動(危険)


上記のようにMSCONFIGでセーフモードを選択した場合ですね。
ここで言っておきますが、Windows 7の場合こちらの方法は大変危険です。
なぜかと申しますと、MSCONFIGを用いてセーフモード起動した場合、エクスプローラが起動時に落ちてしまうため、再度MSCONFIGを用いてのセーフモード解除ができないためです。
もし上の復旧方法[F8キーで「通常起動する」を選ぶ]としても、起動するのはセーフモード状態のWindowsです。通常起動しません。つまりMSCONFIGでセーフモードを選んだ場合、もしMicrosoft IMEにチェックが入っていなかった場合は、ほとんど何もできない状態に陥る可能性が出てきます。

で、ここでの復旧方法。

・リカバリ
俺はこれを選択しそうになりました…。本気で何もできないじゃないか、と思ったので。
ただし、諦めるのは早いです。以下の方法が試せるかもしれません。

・コマンドプロンプト(以下、CMD)から何とかしてセーフモードを解除する
セーフモード上からCMDを起動するやり方は以下の通りです。


 1.一旦電源を落として再起動
 2.F8キーで起動オプション
 3.セーフモードとCMD(コマンドプロンプト)を選択



この問題の場合、こうしないといけません。なぜならセーフモード起動時に「ファイル名を指定して実行」をしてCMDを開こうとしても、開く前に「ファイル名を指定して実行」が落ちてしまうからです。(WindowsキーからCMDを直接起動できましたっけ?)
ちなみに、なぜかCMDは落ちません。(マシンによって違いはあるかもですが)

CMDが無事立ち上がったら、以下のコマンドを入力します。


 bcdedit



なお、このコマンドではBCDというファイルの内容を出力するだけなので、特に危険はありません。
実行して、一番下に safeboot minimal のように書いてあるでしょうか?
(※msconfigでの指定によっては、safeboot network などの表示もあり得ます)
書いてあるならば、以下のコマンドを実行してください。


 bcdedit /deletevalue safeboot



それから再起動しましょう。
CMD上で、


 shutdown -r -t 0



と入力し、再起動させます。
電源ボタンで再起動させてもいいかもですが、ちゃんとBCDに上記のコマンドで変更した内容が反映されるか微妙なので…ちゃんとCMDから再起動させた方が良いと思います。
これで無事通常起動できると思います。ゆっくりお茶でも飲みながら、IMEの設定を見直してみてください。


尚bcdeditというコマンド。
このコマンドはどうやらブート関連のコマンドらしいです。BCDというバイナリファイルに格納されたWindows起動情報を操作したりするコマンドですね。
XP以前はBOOT.iniというファイル(Vista, 7でのBCDに相当?)にブート関連の情報が格納されてて、それをいじったりbootcfgというコマンドでマルチブートにしたりどうのこうのできたみたいですが…Vista, 7ではBCDというファイルに仕様が変更、bootcfgというコマンドも使えなくなり、bcdeditというコマンドを新たに使う必要が出てきたっぽいです。
(ここら辺はちゃんと調べたわけではないので、たぶんに嘘が含まれている可能性があります。そこらへんは各自でお調べください)

上記CMDからセーフモード解除の方法のためのコマンドは、以下を参考にしました。
Windows Vistaにおけるオートメーション(マイナーなやつ) - INASOFT 管理人のふたこと 内の「セーフモードへの切り替え」
INASOFTさん…流石ですね。いじくるつくーるとすっきりデフラグにはお世話になってます(11/02/12追記)

これでとりあえず、MSCONFIGからWindows 7をセーフモード起動してしまって「うわちゃぁ!」と叫ぶ状態からは脱することができると思います。

●結論
・Windows 7(おそらくVistaも)、MSCONFIGからのセーフモード起動はやめた方が良いでしょう。上記のようなことがあったとき、CMDからの修正というのは一般ユーザーやライトユーザーにはちょっと辛いです。
(まぁ一般ユーザーやライトユーザーの方々は、なるべくセーフモードを使わないのが一番いいかもですが…)

●おまけ
・7で起こった不具合は、Vistaでの同様の症状に対する対処をすれば、結構イケる気がします。(まーあくまで自己責任ですけど)
最近思いました。Vistaと7は体感的にですが全然違いますね…いや今更過ぎるだろという感じですが(11/02/12追記)

もし「Windows 7でのセーフモードからの復旧の仕方」で上記が役に立てば幸いです。