BootNextの実現
拙作のシステムユーティリティでBootNextがあります。Vectorにアップしてありますが、
これはなんぞや?というと、
UEFIモードでのデュアルブート支援ユーティリティープログラム リモート接続でOS切り替え
というものですが、例えば二つ以上のディスクがマシンにつながっている時、”ディスクの管理”画面で、

このようになっていて、どちらのディスクも

のようにGPTなディスクであり、マザーボードが古いBIOSではなくUEFIであれば、本来の起動順序を一時的に変更して、
次のブートだけ指定のディスクに切り替えることができます。そのためのユーティリティです。メリットは、再起動後に“F8″キーを連打してブートメニューを出してからディスクを切り替える等しなくても、再起動前に”次のブートはこのディスクにしてね”という設定ができるわけで、Windows 10 と Windows 11とを切り替えるとか、WindowsとLinuxを切り替えるとかがマシンに張り付いていなくてもできます。ということは、リモート接続から設定できるということですね。そのためのプログラムです。上記のVectorのライブラリからダウンロードして実行してみましょうか?初回は、

が出ますけど、臆せず”詳細情報”をクリック。

ここで実行をクリック。ユーザアカウント制御の画面がでるので、”はい”をクリックしてようやく起動です。


ディスクを切り替えるのであれば、他方のディスクを選択して下の方の、“Boot Next”をクリックします。

これで再起動すると他方のディスクから起動します。が、それは次の起動(BootNext)だけで、再度起動すると今のディスクから起動します。Windowsではこのユーティリティを使いますが、切り替えた先がLinux(例えばDebian)ならば、Linux側のユーティリティを使えば良いです。具体的には付属マニュアルを参照願います。あ、ブログの記事なので、ソースコードを提示しましょうね。githubのパブリックリポジトリで公開しました。
TListViewを使っています。珍しくFMXです。動作原理は、
注意:
このプログラムでは、 GetEnvironmentVariable function (winbase.h)
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase- getenvironmentvariable
を使って BootOrder を読み出し、各 BootEntry を読み出して解析して、必要に応じて SetEnvironmentVariable function (winbase.h)
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase- setenvironmentvariable
で”BootNext” を書き込むということをしています。BootNext のみを書き込むので、
BootOrder がぐちゃぐちゃになり、⼆度とブートできなくなるようなことは無いはずですが、
あらゆるケースでの動作保証はできませんので、bcdedit 等のコマンドを⽤いて内容を適宜保存することを推奨します。
と付属マニュアルに書いてあります。あー、管理者権限で動かさせるのは、

のように、プロジェクトオプションの”実行レベル”を”管理者権限が必要”にセットしてください。
コメント