こんにちは、阿久津です。OS(オペレーティングシステム)のバージョンアップに伴い、それまで有用だったアプリケーションが無用の長物になってしまうことがよくあります。例えばWindowsストアアプリでは、比較的重要な地位を占めていた電卓というジャンルは、Windows 8.1標準Windowsストアアプリとして「電卓」が搭載される予定のため、今後縮小していくのは火を見るより明らか(図01)。
そもそも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)。
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)。
■「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
■「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
図22 文字列値「SubCommands」をダブルクリックで開き、値のデータを「NormalMode;SafeMode;SafeModeNetwork;SafeModeCommand」に変更して<OK>ボタンをクリックします |
図28 続いてルートキーから、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Explorer\CommandStore\shellまでキーをたどって開きます |
図44 commandキーの(既定)をダブルクリックし、値のデータを「WScript C:\Windows\SafeMode\SafeMode-Network.vbs」に変更して<OK>ボタンをクリックします |
図52 commandキーの(既定)をダブルクリックし、値のデータを「WScript C:\Windows\SafeMode\SafeMode-Command.vbs」に変更して<OK>ボタンをクリックします |
それでは結果を確認してみましょう。デスクトップの何もないところを[Shift]キーを押しながら右クリックしますと、メニューに<セーフモード>が加わったことを確認できます。サブメニューには<通常モードで再起動><セーフモードで再起動><セーフモード(ネットワーク)で再起動><セーフモード(コマンド)で再起動>と4つの項目が並んでいることでしょう(図63)。
各項目を選択することでセーフモードが起動します。セーフモードから通常モードに戻る場合は、同様の手順で<通常モードで再起動>を選択してください(図64~65)。
「セーフモード(コマンド)で再起動」はエクスプローラーの代わりにコマンドプロンプトが起動するため、デスクトップのコンテキストメニューを参照できません。通常モードに戻る際は、コマンドプロンプトからエクスプローラーを起動し、その後コンテキストメニューから<通常モードで再起動>を選択します(図66~68)。
図68 セーフモード(コマンド)の場合、エクスプローラーが起動していないため、コンテキストメニューが利用できません。コマンドプロンプト上で「explorer」と入力して[Enter]キーを押してください |
本チューニングはあまりにも冗長なため、実際に試すのは面倒でしょう。そこでレジストリファイルおよびVBScriptファイルをZIP形式で圧縮したファイルを用意しました。自己責任でお試しください。また、本チューニングを無効にするには、「\Windows\SafeMode」フォルダーを削除し、HKEY_CLASSES_ROOT\DesktopBackground\Shell\SafeModeキーおよび、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \CommandStore\shellキー下に作成した各キーを削除してください。
それでは、また次号でお目にかかりましょう。
阿久津良和(Cactus)