2014年3月17日月曜日

ブルースクリーンでWindows8が起動できなかったが復帰 原因とエラーコード

今朝、SONYのVAIO duo 11 の電源を入れるとブルースクリーンになり、以下のようなメッセージが表示されました。


Recovery

Your PC needs to be repaired

The operating system couldn't be loaded because a critical system driver is missing or contains errors.

File:\windows\System32\drivers\iaStorA.sys
Error code:0xc0000017

You'll need to use the recovery tools on your installation media. If you don't have any installation media (like a disc or USB device), contact your system administrator or PC manufacturer.

Press the Windows key for UEFI firmware Settings
---------------------------------------------------

どうやらWindows8起動時にiaStorA.sysというファイルが読めなかったようです。
何回起動しなおしても、同じ画面になって先に進むことができません。
エラーコードやファイル名で対処法を検索して探しますが、原因は分かりません。

情報がなければ自分でどうにかするしかありません。
まず、レスキューモードを起動して、「トラブルシューティング→詳細オブション→自動修復→Windows 8.1」をやってみますが、なにも修復できませんでした。
次に、「トラブルシューティング→詳細オブション→リカバリーやメンテナンス→Windows 8.1」の中から「かんたん診断」や「ハードディスク診断と修復」を試してみますが、問題は発見されず、VAIOを起動しなおしても相変わらずブルースクリーンです。
「トラブルシューティング→PC のリフレッシュ」というのがあって、これはファイルを残したままWindowsを再インストールしたときと同じような状態にできるらしいのですが、インストールしたプログラムが削除されてなにもなかったことにされるらしいので、できればやりたくありません。いちおう何を削除したのかログに残してくれるようですが、再インストールしなおすのは面倒です。
残るは、「トラブルシューティング→詳細オブション→イメージでシステムを回復→Windows 8.1」というのがありまして、システムのフルバックアップがあればそれから完全に回復できるようです。幸い二週間ほど前にバックアップを取ったものがあったので、最悪のときはこれを使うしかないかもしれません。
しかし、その前にやれることはやっておきましょう。「トラブルシューティング→詳細オブション→コマンド プロンプト」を開き、読めないというCドライブの「\windows\System32\drivers\iaStorA.sys」をコピーしたり、リネームしたりして作りなおてみましたが、ダメです。Xドライブのリカバリー領域にある同じ名前のファイルをコピーしてきましたが、これまた結果は変わりません。それならと読めないというiaStorA.sysを削除してみると、今度は「\windows\System32\drivers\Ntfs.sys」というファイルが読めないと言われます。

これはもう二週間前のシステムイメージのバックアップから戻すしかなさそうかとあきらめかけていたところ、どういうわけかWindowsが起動できてしまいました。
その後、何度か再起動を試しましたが、ちゃんとWindowsが起動できます。
原因は分かりませんが、単にSSDの調子が悪かったのかもしれません。

いずれにせよ思うのは、システムイメージのバックアップをとっておくべきだということです。
システムの完全なイメージがあれば、少なくともバックアップをとった時点の状態には戻すことができます。

もうひとつ、今回のトラブル中に試せなかったのはセーフモードでの起動です。Windows8では簡単にセーフモードで起動できないようになったようで、こういう場合に備えてセーフモードで起動できるように予め設定しておいた方がよさそうです。

2014年3月13日木曜日

タスクスケジューラでバッチファイルが実行できない

Windowsのタスクスケジューラでバッチファイルを実行しようとして、バッチファイルがうまく実行できないことがありました。
他のバッチファイルは実行できるのですが、特定のバッチファイルのみが実行できず、しかもタスクスケジューラは何が問題か教えてくれないので、原因が特定できず少しハマってしまいました。


その原因はずばり、カレントディレクトリにありました。

バッチファイルをエクスプローラーやコマンドプロンプトから実行しているときは、結果的にバッチファイルのディレクトリがカレントディレクトリになっているのですが、タスクスケジューラから実行する場合は、カレントディレクトリがバッチファイルのディレクトリになっていないのです。

そこで、バッチファイルの先頭にcdコマンドを挿入し、バッチファイルのディレクトリに移動するようにします。

cd C:\batch_dir

これでうまくいったのですが、その後、環境を変えた時にこれでもうまくいかないことがありました。
それはドライブが変わった時です。その場合はさらにカレントドライブも変更します。

D:
cd D:\batch_dir

つまらないところでハマってしまいました。

タスクスケジューラの履歴タブが無効になっているのを有効にする

タスクスケジューラのタスクのプロパティを表示したときに履歴タブが「履歴(無効)」となっていて実行時のログを確認できないことがあります。

これを有効にするには、イベンドビューアーから設定を変更します。イベンドビューアーはコントロールパネルの管理ツールの中にあります。

イベントビューアーの「イベントビューアー(ローカル)」→「アプリケーションとサービス ログ」→「Microsoft」→「Windows」→「TaskScheduler」とたどっていき、

右側ペインから「Operational」を右クリックしてプロパティを開きます。


プロパティの中から「ログを有効にする」のチェックボックスをオンにします。

その後、タスクスケジューラでF5キーを押して表示を更新するなり、タスクスケジューラを再起動するなりすれば、履歴タブの(無効)表示はなくなって、有効になります。

お試しください。