こんにちは、阿久津です。OS(オペレーティングシステム)のバージョンアップに伴い、それまで有用だったアプリケーションが無用の長物になってしまうことがよくあります。例えばWindowsストアアプリでは、比較的重要な地位を占めていた電卓というジャンルは、Windows 8.1標準Windowsストアアプリとして「電卓」が搭載される予定のため、今後縮小していくのは火を見るより明らか(図01)。

図01 Windows 8.1プレビューのWindowsストアアプリ「電卓」。関数電卓や単位変換機能も兼ね備え、そこそこ使えます

そもそもWindows OSにおける各種ユーティリティ系アプリケーションは、サードパーティベンダー製アプリケーションのサブセット(機能縮小版)を採用してきました。Windows 9x時代のデフラグはSymantec製。Windows 2000以降はExecutive Software International(現Diskeeper Corporation)製を採用。最近では標準添付されるようになったWindows Defenderも、GIANT Company Softwareを買収して改良したものです。

OSが多機能になることはコンピューター初心者にとって、"買ったその日から使える"ため、価値が高まるのは確か。しかし、その影で多くのソフトウェアベンダーが開発してきたアプリケーションが死屍累累となってしまうのが健全な流れなのか疑問を覚えます。より優れたアプリケーションが機能やユーザビリティの面で劣っているアプリケーションを蹴落とすという弱肉強食的なサイクルは、過去に何度も繰り返されてきました。このことに苦言を呈する意図はありません。ただ、OSが蹴落とす側に立つのはいかがなものか、という話です。

Windows OSに限らず、OS Xなど市販のOSが標準搭載したアプリケーションの影響によって、創出された市場もありました。例えばOS標準のフルバックアップ機能は、より高品質なアプリケーションを生み出す土壌を生み出しました。しかし、フルバックアップというスタイルが過去のものとなりつつあるだけに、Windows 8では「Windows 7のファイルの回復」と下位互換性を維持するためのアプリケーションとなり、Windows 8.1プレビュー版には用意されず、RTM(Release To Manufacturing version:製造工程版)版で同機能が用意されるかは現時点で不明です(図02)。

図02 Windows 8.1プレビューのコントロールパネル。フルバックアップを作成する機能は見当たりません

iOSにおいては、いまだにグループ機能を前面に押し出さない「住所録」や、撮影内容によってフォルダー分けする機能を用意しない「フォト」などが、"60~70点程度"の完成度にとどめられたことが、App Storeに並ぶアプリケーションの増加を推し進める要素の一つにつながったのでしょう。OSが備える機能の充実はコンピューター初心者にとって有益ながらも、その一方でアプリケーション市場が縮小する一因となる現状を踏まえますと、なかなか難しい問題です。

さて、以前の記事で述べた様に、Windows 8によるセーフモードは参照しにくくなっています。同記事ではその対処方法として、bcdedit.exeコマンドでブートメニューポリシーを変更し、古いブートメニューを利用可能にしました。そこで思いつくのがブートメニューポリシーを変更すると同時に、shutdown.exeコマンドで再起動を実行するというもの。今回はこの動作をコンテキストメニューから実行するチューニングをお届けしましょう。

1. 「\Windows\SafeMode」フォルダーを作成します。
2. 各VBScriptファイルを作成します。
3. 作成したVBScriptファイルをSafeModeフォルダーに移動します。
4. 管理者権限でレジストリエディターを起動します。
5. HKEY_CLASSES_ROOT\DesktopBackground\Shell\SafeModeキーを作成します。
6. 文字列値「MUIVerb」を作成し、値のデータを「セーフモード」に変更します。
7. 文字列値「SubCommands」を作成し、値のデータを「NormalMode;SafeMode;SafeModeNetwork;SafeModeCommand」に変更します。
8. 文字列値「icon」を作成し、値のデータを「imageres.dll,-149」に変更します。
9. 文字列値「Extended」を作成します。
10. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \CommandStore\shell\SafeModeキーを作成します。
11. (既定)の値のデータを「セーフモードで再起動」に変更します。
12. 文字列値「HasLUAShield」を作成します。
13. サブキーとしてcommandキーを作成します。
14. (既定)の値のデータを「WScript C:\Windows\SafeMode\SafeMode.vbs」に変更します。
15. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \CommandStore\shell\SafeModeNetworkキーを作成します。
16. (既定)の値のデータを「セーフモード(ネットワーク)で再起動」に変更します。
17. 文字列値「HasLUAShield」を作成します。
18. サブキーとしてcommandキーを作成します。
19. (既定)の値のデータを「WScript C:\Windows\SafeMode\SafeMode-Network.vbs」に変更します。
20. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \CommandStore\shell\SafeModeCommandキーを作成します。
21. (既定)の値のデータを「セーフモード(ネットワーク)で再起動」に変更します。
22. 文字列値「HasLUAShield」を作成します。
23. サブキーとしてcommandキーを作成します。
24. (既定)の値のデータを「WScript C:\Windows\SafeMode\SafeMode-Command.vbs」に変更します。
25. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \CommandStore\shell\NormalModeキーを作成します。
26. (既定)の値のデータを「通常モードで再起動」に変更します。
27. 文字列値「HasLUAShield」を作成します。
28. サブキーとしてcommandキーを作成します。
29. (既定)の値のデータを「WScript C:\Windows\SafeMode\NormalMode.vbs」に変更します。
30. レジストリエディターを終了し、Windows 8へ再サインインします。

これでチューニングが完了しました(図03~62)。

図03 エクスプローラーで「Windows」フォルダーを開き、クイックアクセスツールバーの<新しいフォルダー>をクリックするか、[Ctrl]+[Shift]+[N]キーを押します

図04 アクセス拒否を示すダイアログが現れます。<続行>ボタンをクリックしてください

図05 新しいのフォルダー名前を「SafeMode」に変更します

図06 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「notepad」と入力して<OK>ボタンをクリックします

図07 メモ帳が起動したら、下記の内容を入力して<×>ボタンをクリック。保存をうながすダイアログが現れたら、<保存する>ボタンをクリックします

■「NormalMode.vbs」の内容

If WScript.Arguments.length =0 Then
Set OS = CreateObject("Shell.Application")
OS.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " Run", , "runas", 1
Else
ChangeMode
End If

Sub ChangeMode
Set OS2 = WScript.CreateObject("WScript.Shell")
OS2.Run "bcdedit /deletevalue {current} safeboot",0,True
OS2.Run "bcdedit /set {current} safebootalternateshell no",0,True
OS2.Run "shutdown -r -t 00 -f",0,True
End Sub

図08 Windowsフォルダー下には直接保存できないので、デスクトップに移動し、テキストボックスの内容を「NormalMode.vbs」に変更して、<保存>ボタンをクリックします

図09 図06~08の手順を参考に、「SafeMode.vbs」「SafeMode-Network.vbs」「SafeMode-Command.vbs」をデスクトップに作成します

■「SafeMode.vbs」の内容

If WScript.Arguments.length =0 Then
Set OS = CreateObject("Shell.Application")
OS.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " Run", , "runas", 1
Else
ChangeMode
End If

Sub ChangeMode
Set OS2 = WScript.CreateObject("WScript.Shell")
OS2.Run "bcdedit /set {current} safeboot minimal",0,True
OS2.Run "bcdedit /set {current} safebootalternateshell no",0,True
OS2.Run "shutdown -r -t 00 -f",0,True
End Sub

■「SafeMode-Network.vbs」の内容

If WScript.Arguments.length =0 Then
Set OS = CreateObject("Shell.Application")
OS.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " Run", , "runas", 1
Else
ChangeMode
End If

Sub ChangeMode
Set OS2 = WScript.CreateObject("WScript.Shell")
OS2.Run "bcdedit /set {current} safeboot network",0,True
OS2.Run "bcdedit /set {current} safebootalternateshell no",0,True
OS2.Run "shutdown -r -t 00 -f",0,True
End Sub

■「SafeMode-Command.vbs」の内容

If WScript.Arguments.length =0 Then
Set OS = CreateObject("Shell.Application")
OS.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " Run", , "runas", 1
Else
ChangeMode
End If

Sub ChangeMode
Set OS2 = WScript.CreateObject("WScript.Shell")
OS2.Run "bcdedit /set {current} safeboot minimal",0,True
OS2.Run "bcdedit /set {current} safebootalternateshell yes",0,True
OS2.Run "shutdown -r -t 00 -f",0,True
End Sub

図10 作成した4つのVBScriptファイルを、最初に作成した「\Windows\SafeMode」フォルダーにドラッグ&ドロップします

図11 アクセス拒否を示すダイアログが現れます。<続行>ボタンをクリックしてください

図12 これでVBScriptファイルの移動が完了しました。エクスプローラーによる操作はこれで終了です

図13 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図14 レジストリエディターが起動したら、 HKEY_CLASSES_ROOT\DesktopBackground\Shellまでキーをたどって開きます

図15 Shellキーの右ペインを右クリックし、<新規>→<キー>とクリックします

図16 キー名を「新しいキー #1」から「SafeMode」に変更します

図17 SafeModeキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図18 値名を「新しい値 #1」から「MUIVerb」に変更します

図19 文字列値「MUIVerb」をダブルクリックで開き、値のデータを「セーフモード」に変更して<OK>ボタンをクリックします

図20 SafeModeキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図21 値名を「新しい値 #1」から「SubCommands」に変更します

図22 文字列値「SubCommands」をダブルクリックで開き、値のデータを「NormalMode;SafeMode;SafeModeNetwork;SafeModeCommand」に変更して<OK>ボタンをクリックします

図23 SafeModeキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図24 値名を「新しい値 #1」から「icon」に変更します

図25 文字列値「icon」をダブルクリックで開き、値のデータを「imageres.dll,-149」に変更して<OK>ボタンをクリックします

図26 SafeModeキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図27 値名を「新しい値 #1」から「Extended」に変更します

図28 続いてルートキーから、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Explorer\CommandStore\shellまでキーをたどって開きます

図29 shellキーの右ペインを右クリックし、<新規>→<キー>とクリックします

図30 キー名を「新しいキー #1」から「SafeMode」に変更します

図31 SafeModeキーの(既定)をダブルクリックし、値のデータを「セーフモードで再起動」に変更して<OK>ボタンをクリックします

図32 SafeModeキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図33 値名を「新しい値 #1」から「HasLUAShield」に変更します

図34 SafeModeキーを右クリックし、<新規>→<キー>とクリックします

図35 キー名を「新しいキー #1」から「command」に変更します

図36 commandキーの(既定)をダブルクリックし、値のデータを「WScript C:\Windows\SafeMode\SafeMode.vbs」に変更して<OK>ボタンをクリックします

図37 shellキーの右ペインを右クリックし、<新規>→<キー>とクリックします

図38 キー名を「新しいキー #1」から「SafeModeNetwork」に変更します

図39 SafeModeNetworkキーの(既定)をダブルクリックし、値のデータを「セーフモード(ネットワーク)で再起動」に変更して<OK>ボタンをクリックします

図40 SafeModeNetworkキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図41 値名を「新しい値 #1」から「HasLUAShield」に変更します

図42 SafeModeNetworkキーを右クリックし、<新規>→<キー>とクリックします

図43 キー名を「新しいキー #1」から「command」に変更します

図44 commandキーの(既定)をダブルクリックし、値のデータを「WScript C:\Windows\SafeMode\SafeMode-Network.vbs」に変更して<OK>ボタンをクリックします

図45 shellキーの右ペインを右クリックし、<新規>→<キー>とクリックします

図46 キー名を「新しいキー #1」から「SafeModeCommand」に変更します

図47 SafeModeCommandキーの(既定)をダブルクリックし、値のデータを「セーフモード(コマンド)で再起動」に変更して<OK>ボタンをクリックします

図48 SafeModeCommandキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図49 値名を「新しい値 #1」から「HasLUAShield」に変更します

図50 SafeModeCommandキーを右クリックし、<新規>→<キー>とクリックします

図51 キー名を「新しいキー #1」から「command」に変更します

図52 commandキーの(既定)をダブルクリックし、値のデータを「WScript C:\Windows\SafeMode\SafeMode-Command.vbs」に変更して<OK>ボタンをクリックします

図53 shellキーの右ペインを右クリックし、<新規>→<キー>とクリックします

図54 キー名を「新しいキー #1」から「NormalMode」に変更します

図55 NormalModeキーの(既定)をダブルクリックし、値のデータを「通常モードで再起動」に変更して<OK>ボタンをクリックします

図56 NormalModeキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図57 値名を「新しい値 #1」から「HasLUAShield」に変更します

図58 NormalModeキーを右クリックし、<新規>→<キー>とクリックします

図59 キー名を「新しいキー #1」から「command」に変更します

図60 commandキーの(既定)をダブルクリックし、値のデータを「WScript C:\Windows\SafeMode\NormalMode.vbs」に変更して<OK>ボタンをクリックします

図61 これでレジストリエディターによる作業は完了しました。<×>ボタンをクリックして、レジストリエディターを終了させます

図62 スタート画面のユーザーアイコンをクリックし、メニューの<サインアウト>をクリックして、Windows 8に再サインインします

それでは結果を確認してみましょう。デスクトップの何もないところを[Shift]キーを押しながら右クリックしますと、メニューに<セーフモード>が加わったことを確認できます。サブメニューには<通常モードで再起動><セーフモードで再起動><セーフモード(ネットワーク)で再起動><セーフモード(コマンド)で再起動>と4つの項目が並んでいることでしょう(図63)。

図63 デスクトップの何もないところを[Shift]キーを押しながら右クリックし、<セーフモード>→<セーフモードで再起動>とクリックします

各項目を選択することでセーフモードが起動します。セーフモードから通常モードに戻る場合は、同様の手順で<通常モードで再起動>を選択してください(図64~65)。

図64 これでコンピューターが再起動し、セーフモードで起動しました。パスワードを入力してサインインすれば使用可能になります

図65 通常モードに戻るには、デスクトップの何もないところを[Shift]キーを押しながら右クリックし、<セーフモード>→<通常モードで再起動>とクリックします

図66 図63で<セーフモード(ネットワーク)で再起動>を選択すれば、ネットワーク上の共有フォルダーが参照できます

「セーフモード(コマンド)で再起動」はエクスプローラーの代わりにコマンドプロンプトが起動するため、デスクトップのコンテキストメニューを参照できません。通常モードに戻る際は、コマンドプロンプトからエクスプローラーを起動し、その後コンテキストメニューから<通常モードで再起動>を選択します(図66~68)。

図67 図63で<セーフモード(コマンド)で再起動>を選択すれば、エクスプローラーの代わりにコマンドプロンプトが起動します

図68 セーフモード(コマンド)の場合、エクスプローラーが起動していないため、コンテキストメニューが利用できません。コマンドプロンプト上で「explorer」と入力して[Enter]キーを押してください

本チューニングはあまりにも冗長なため、実際に試すのは面倒でしょう。そこでレジストリファイルおよびVBScriptファイルをZIP形式で圧縮したファイルを用意しました。自己責任でお試しください。また、本チューニングを無効にするには、「\Windows\SafeMode」フォルダーを削除し、HKEY_CLASSES_ROOT\DesktopBackground\Shell\SafeModeキーおよび、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \CommandStore\shellキー下に作成した各キーを削除してください。

それでは、また次号でお目にかかりましょう。

阿久津良和(Cactus