公開日:2007/ 4/22
今回もやっぱり、なんとなく若干ショートバージョンでお送りしています。
Windows Vista対応を始めてから6か月くらい経過しています。いろんな資料に目を通したり、実際にコーディングを通して体感で…というかフィーリングでいろいろつかんできた「コツ」のようなものがあったりするので、今日はそれについて書いてみようと思います。
お題目はオートメーションとなっていますが、オートメーションでない話題も一部混ざっていたりします。気にしないでください。
Windows Vistaでの新規話題というと、強化されたグラフィックとか、リソース食いすぎとか、強化されたシェルに関する話とか、ユーザーアカウント制御が扱いづらいとか、有名どころの話は多数あるわけですが、今日は無名どころ(と自分が思っている話)についてでもまとめてみようかと思います。
なぜオートメーションなのかというと、今回のネタのほとんどが、すっきり!! デフラグでの自動実行のときに使うためのネタであるからです。
なお、将来サービスパックなどが出た時に、セキュリティ上の理由で無くなってしまうものもあるかもしれないので注意。
また、お決まりの文句となりますが、ここに書かれていることを用いる場合は、自己責任でお願いします。もしかしたら勘違いで真実でないことが書いてあるかもしれませんので。
うちのサイトでオートメーションというと、やっぱりこれが思い浮かぶって方が多いと思います。
Windows Vistaでは、デフラグは「人間がコンピュータを使わないスキに背後で自動的に流れるもの」になっています。Windows XPのときからそうだったのですが、それがより強く出ている……というか、快適になっている感じです。Windows Vistaの新機能「ロープライオリティI/O」の成果でしょうか。まぁ、ハードディスクの発する音の大きさによっては、四六時中アクセスされることが不快になる場合もあるかもしれませんが。しばらく使い続けているとそれもなくなってくるので、はじめのうちの我慢ってことになるかなぁと。
しかもこのデフラグは、人間の体感速度が向上するよう、ねらいを定めて必要な部分を重点的に再配置します(不要な部分は再配置しません)。
そんなわけで、人間が思い立った時にデフラグを流したところで、それで体感速度が向上するようにはならないんじゃないか…というのが感想です。しかし、定期メンテナンスなどの目的で、一時に集中してデフラグを流したいという声もあるのだと思うので、ユーザー指定でデフラグを行う機能もあるのだと思います。
さて、そんなWindows Vistaのユーザー指定のデフラグですが、デフラグしたいドライブを選択できないなど、かなりチープな作りになっています。

ドライブが指定できなくなった代わりに、スケジューリングのための機能が付いています。このことから、「あまり人間の指定をあてにしない」作りになっているのだろうと思います。確かに最近は、パソコンのユーザーが皆ヘビーユーザーばかりであるわけでもありませんし、こうすることで、ユーザーの迷いを極力減らそうということなのかもしれません。
ただ、こういった流れは、デフラグを自らの手で行いたいヘビーユーザーには不満かもしれません。ドライブすら指定できないのか!と。
ドライブを指定したい場合は、コマンドラインのデフラグを使います。「コマンドプロンプト」を立ち上げる時は、左クリックするのではなく、右クリックを行い、「管理者として実行」を行いましょう。(マウスの左右ボタンの設定を逆にしている場合は、左右を逆にして読んでください、以降同じ)

コマンドラインからは、次のような感じでコマンドを入力します。
C:\Users\User>defrag d:
ここでは d: となっていて、Dドライブを指定していますが、Cドライブを指定したければ c: と指定します。複数のドライブを同時に指定する機能はありませんが、コマンドプロンプトの機能を利用しているので、
C:\Users\User>defrag d:&defrag e:
みたい & 記号で区切って実行してやれば、複数のドライブを順次デフラグしていくことができます。様々なオプションを指定したい場合や、標準入出力のリダイレクションを細かく指定したい場合などは、各コマンドをさらに括弧 ( ) で囲ってやるとよいでしょう。
デフラグを実行した後にコンピュータを自動的に終了させたければ、shutdownコマンドが併用できます。
C:\Users\User>defrag d:&defrag e:&shutdown /s /t 10
これがうまく使用できれば、すっきり!! デフラグがいらなくなるんじゃないかとも思えてきますね…。実際、Windows XPくらいから、オートメーション(自動処理)に対する自由度が非常に上がってきていますから、OSの機能を使うだけでも、けっこういろんなことができてしまいます。(上のようなコマンドは、Windows XPでも使用可能です)
なお、Windows Vistaのデフラグは、64MBより大きい断片の最適化を行いません(前にこのサイトのどこかで述べたような気もしますけどもう一度)。デフラグを行うために頑張ってデータの移動を行うよりも、放置した方が良いという判断なのでしょう。確かにその方がディスクの寿命は延びるかもしれません。が、断片化がちょっとでも残っていると、どうしても気持ち悪くて嫌だという方は、-w オプションを使います。
C:\Users\User>defrag d: -w
空き容量が15%未満のディスクをデフラグしようとする場合、15%以上の空き容量を準備するよう求められますが、それでもデフラグを強行したい場合は -f オプションを使います。このあたりは、Windows XPと変わりません。
C:\Users\User>defrag d: -f
ただし、不完全なデフラグとなりますので、やっぱり15%の空き容量を確保することをお勧めします。
ところで、このdefragコマンドなのですが、戻り値の意味がいまいち不明です。成功してもキャンセルしても0が返ってきたり、何かのタイミングで37みたいな数字が返ってきたり……。何か知っている方がいらっしゃったら、情報提供をお願いします。
次点に来るのは、やはりチェックディスクかと思います。Windows 9xでいうところのスキャンディスクです。
Windows Vistaのチェックディスクも、Windows XPと同様に、ドライブのプロパティから開きます。Windows XPのときとあまり変わりません。
デフラグのときと同様に、やった!って感じのデフラグを行いたければ、やはりコマンドライン(管理者権限使用)から行うことになるでしょう。
C:\Users\User>chkdsk d:
上記の指定はチェックを行うだけで、修復は行いません。修復も行いたければ、 /f オプションを使います。
C:\Users\User>chkdsk d: /f
不良セクタの検出も行いたければ、 /r オプションを使います。ただし、とても時間がかかります(場合によっては数日)ので、時間に余裕のある時に行いましょう。
C:\Users\User>chkdsk d: /r/f
なお、GUIのチェックディスクも、コマンドラインのチェックディスクも、修復が伴う場合、ドライブがロックされていると実行してくれません。次回Windows起動時に自動で行うよう、スケジューリングされます。このチェックディスクは、一度開始されてしまうと中断方法がないようですので、十分に時間のある時に行うようにするとよいでしょう。
これは、以前にも書いた記事の焼き直しになるので、そのままコピーしてきます。
このユーザー アカウント制御(UAC)について、レジストリの編集によりこれを抑止する方法が、Windows XPスマートチューニングに掲載されていました。
要は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System にあるDWORD値 EnableLUA を 0 にしてやるとのこと。
色々試してみたところ、デフォルトは1になっていてこれが「有効」を示し、0にすることで「無効」になる。値を削除すると1を意味するものとして扱われる、といった感じです。(後略)
今日はオートメーションというお題目になっていますので、これをコマンドラインで実行する場合を考えます。バッチファイルかなんかにしておけば、これを実行して再起動することで、UACのオン/オフができるようになります。コマンドプロンプトは管理者権限で起動するようにしましょう。
UACをオフにする場合:
C:\Users\User>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
UACをオンにする場合:
C:\Users\User>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\runに登録されたアプリケーションや、スタートメニューのスタートアップに登録されたアプリケーションが、「管理者権限が必要」というマニフェストを持っていた場合、起動が保留されます。
これではスタートアップになりません。解決策として、今のところ見つかっているものとしては、
です。
ただし、インストール後の後処理等によくつかわれる HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce については、この制限の対象とならないようです。
ところでもうひとつ。スタートアップに登録されたアプリケーションは、Windows Vistaの新機能「ロープライオリティI/O」の対象となるため、ファイル入出力の速度が遅くなることがあります。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\WinlogonにShellという文字列値を作ってファイル名を入れると、それがWindowsのシェルとして動くようになります。
ところがその指定されたプログラムが「管理者権限が必要」というマニフェストを持っていた場合、指定は無視され、デフォルトのシェル(Explorer.exe)が起動します。解決策として、今のところ見つかっているものとしては、
です。Windows Vistaのセキュリティの考え方からすると、シェルが管理者権限が持っているわけにはいかないということなのでしょう。
Windows Vistaでのセーフモードへの切り替えについては、一般的な方法については Windows XP と同じです。ここで一般的と言っているのは、
です。
セーフモードへの移行をプログラムから行う場合については、注意が必要です。というのも、Windows Vistaからは新しくBCDというバイナリファイルに起動情報が格納されるようになったからです。
これまでは直接的なり間接的なりboot.iniを編集していたわけですが、BCDはバイナリファイルですので直接的な編集を行うことはできません。
BCDを編集するには、bcdedit.exe というコマンドラインツールを使います。bcdedit.exeの実行には、管理者権限が必要です。
最小の構成のセーフモード(ドメインで管理されているPCでは使用してはいけません):
C:\Users\User>bcdedit /set safeboot Minimal
ネットワークが使用可能なセーフモード:
C:\Users\User>bcdedit /set safeboot Network
セーフモードを解除:
C:\Users\User>bcdedit /deletevalue safeboot
このあと再起動すれば、Windowsの起動モードが切り替わります。
なお、BCDをGUIから操作したい場合は、msconfig (システム構成ユーティリティー)を使うと良いでしょう。ただし、旧バージョンのWindowsのエントリの編集も行いたいという場合は、VistaBootPROなどのサードパーティ製のツールが有効です。