久しぶりに自作PCをして、中身を最新のスペックにしました。
Windows 11をインストールして、ドライバも一通り導入。よく使うアプリも入れて、動作も快適。
「今回はトラブルなしで環境が整ったな」と思っていました。
…が、ある朝、違和感に気づきます。
電源を押して起動すると、デスクトップ画面はすぐ表示されるのに、スタートアップアプリ(LINE / Rainmeter など)がなかなか立ち上がらない。
体感では 1分〜2分くらい待たされることもあり、一定ではなくブレます。
さすがに新しいCPUで、メモリも64GB詰んでるのにスペック不足はあり得ない。
「もしかしてアプリ自体が重いのか?」と思って手動で起動すると、どれも 1~3秒以内で普通に立ち上がる。
つまり、
Windows側の何かしらのシステムがアプリの起動を遅らせているっぽい。
ということに気づいて調べた結果、その原因が分かったので、解決方法をメモしておきます。
※本記事は レジストリ編集を含みますので自己責任でお願いします。
症状
- Windows起動後、デスクトップはすぐ表示される。
- ただしスタートアップアプリが しばらく起動しない。
- アプリを手動で起動すると数秒で立ち上がる。
調査してわかったこと
最初は、接続機器やドライバーの相性問題を疑って、USB機器を外したり、各種ドライバーを入れ直したりして切り分けていました。
しかし結論から言うと、それらは 原因ではありませんでした。
調べていくと、どうやらこれは Windows 11(22H2以降)の仕様として、
- Windowsが「PCがアイドル状態になるまで」スタートアップの開始を待つことがある。
- その結果、環境によっては 数十秒〜数分 まで遅れることがある。
…という仕組みがあることが分かりました。
要は、Windowsが意図的にスタートアップアプリの起動をずらしているとのことでした。
参考
- Microsoft Japan 公式 Support Blog
Windows 11 でアプリケーションの自動起動のタイミングが遅くなる事象について - Reddit
Windows 11のスタートアップアプリの起動が非常に遅い
解決方法(レジストリ変更)
結論:StartupDelayInMSec と WaitForIdleState を 0 にすると、スタートアップアプリの起動が早くなります。
それぞれ何の値?
-
StartupDelayInMSec
スタートアップアプリ起動前に「固定の待ち時間」を指定する値。 -
WaitForIdleState
PCが「アイドル状態」になるまでスタートアップ開始を待つかどうかの値。
これは、コア数が少ないなどの環境で起動直後の負荷を抑えるために Windows側が設けている挙動のようです。
そのため、これらを0にするとスタートアップは早くなる一方で、低スペック環境によっては ログオン直後に一時的に重く感じる可能性があります。
スタートアップアプリが少量だったり、余裕があるスペックであれば0にしても問題ないようです。
もし気になる場合は、後述の「戻し方」で元に戻せます。
手順(.regで適用)
メモ帳に以下を貼り付け、起動_スタートアップ遅延OFF.regなどの名前で 拡張子 .reg で保存し、ダブルクリックで実行します。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize]
"StartupDelayInMSec"=dword:00000000
"WaitForIdleState"=dword:00000000
反映には 再起動が必要です。
私の環境だと、レジストリ変更後は1分以上かかったスタートアップアプリの起動が、 Windowsのデスクトップが表示された瞬間に立ち上がるようになりました。
戻し方(デフォルトに戻す)
以下を、起動_スタートアップ遅延OFF_解除.regなどの名前で保存し、実行します。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize]
"StartupDelayInMSec"=-
"WaitForIdleState"=-
こちらも反映には 再起動が必要です。
個人的なオススメ
私の場合、StartupDelayInMSec(固定の待ち時間)は体感で 約10秒程度で、そこまで気になりませんでした。
一方で、遅延の主因は WaitForIdleState 側(アイドル待ち)にあり、これをデフォルトに戻すと 1分以上待たされることもありました。
そのため、私はStartupDelayInMSecで余白を持たせて、 WaitForIdleStateだけ0にする設定にしました。
設定は同じく、メモ帳に以下を貼り付け、起動_アイドル待ちOFF.reg などの名前で保存し、ダブルクリックで実行します。
WaitForIdleStateだけ 0 にする
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize]
"StartupDelayInMSec"=-
"WaitForIdleState"=dword:00000000
反映には 再起動が必要です。
これで、Windowsデスクトップ画面に入って10秒ほど経過してからスタートアップアプリが立ち上がるようになりました。
デフォルトに戻したい場合は、上の戻し方と一緒です。
自分のメモ用としてこの記事は以上です。