Windows 10 1709で、サインアウト(ログオフ)のデフォルトの挙動が変更されました。アプリは常にリスタートマネージャーによる再起動の対象となります。この仕様変更でアプリはどのような影響を受けるのでしょうか?
Windows 10 1709 (Fall Creators Update)でのアプリの再起動
Windows 10は、半年に一度くらいの頻度で、アップグレードされます。そのアップグレードごとに、Windowsの機能が追加や更新されていきます。
Windows 10 1709 (Fall Creators Update)で、リスタートマネージャーに関係するWindowsの振る舞いに変更が入りました。
Windows Vistaで導入されたリスタートマネージャーによるアプリの再起動は、インストーラーなどが更新対象のファイルが使用中で置き換えができないときに発生しました。
しかし、Windows 10 1709では、通常の再起動やシャットダウンに伴うユーザーのサインアウト・サインイン(ログオフ・ログオン)のときもリスタートマネージャーによるアプリの再起動の対象となりました。
もちろん、アプリが再起動しないようにすることができます。「設定」→「アカウント」→「サインインオプション」→「プライバシー」で変更できます。「サインイン情報を使用してデバイスのセットアップを自動的に完了し、更新または再起動後にアプリを再び開くことができるようにします。」(Windows 10 1809での文言)の設定をオフにすることによって アプリは再起動しなくなります。
実際にアプリの再起動を確認する
前回の投稿で説明したように、アプリの再起動を確認するためにテストツールを作成しました。
です。ダウンロードはこちらです。
zipファイルの中には二つのEXEファイルがあります。RestartManagerTest.exeは32ビットアプリで32ビットWindows および64ビットWindowsの両方で起動できます。RestartManagerTest64.exeは64ビットアプリで、64ビットWindowsのみで起動できます。
このツールを使って、Windows 10 1809での再起動の振舞の確認をします。
事前にアプリの再起動を登録する
まず、WM_QUERYENDSESSIONメッセージを受信する前にアプリの再起動の登録をする場合です。
- Restart Manager Test toolを起動します。
- Call RegisterApplicationRestart()のチェックボックスのチェックを外す
- RegisterApplicationRestart() ボタンをクリックして、アプリの再起動を登録します。
- Windows を再起動する
- 結果: Windows にサインインした後、アプリが自動的に起動します。
想定通りに、Windowsの再起動後のサインインで、アプリが再起動します。問題ありません。
WM_QUERYENDSESSIONメッセージを受信したときにアプリの再起動の登録する
次に、WM_QUERYENDSESSIONメッセージを受信したときにアプリの再起動の登録をする場合です。
- Restart Manager Test toolを起動します。
- Call RegisterApplicationRestart()のチェックボックスのチェックを入れる
- Windows を再起動する
- 結果: Windows にサインインした後、アプリが自動的に起動しません。
あれっ、なぜかWindowsの再起動後にアプリが起動してきませんね。本来の仕様では、アプリが再起動するはずです。ログファイルを確認すると、WM_QUERYENDSESSIONメッセージは、ENDSESSION_CLOSEAPP (0x00000001)
フラグがセットされた状態で受信できています。また、アプリの再起動の登録のAPI(RegisterApplicationRestart()
)の呼び出しも成功しています。
RegisterApplicationRestart()
の呼び出しは、WM_ENDSESSIONメッセージの処理中は無効であるが、WM_QUERYENDSESSIONメッセージの処理中は有効であり、呼び出して設定を更新できる最後のタイミングであるとAPIの仕様(英語)に記載されています。
そのため、Windowsのバグのような気がします。
フィードバックHubにバグとして登録
フィードバックHubアプリを使って2018年12月14日にWindowsのバグとして登録しました。登録したのは以下の項目です。
タイトル: WM_QUERYENDSESSIONのタイミングにおいてRegisterApplicationRestart()での登録が反映されない
日本語版のフィードバックHubに登録したので、日本語版からしか検索できないと思います。
修正されるとよいですね。