トースト通知を表示する際に例外が発生する問題

Last Update: feedback 共有

いつも弊社製品をご利用いただきまして誠にありがとうございます。
Windows Commercial Support の相沢です。

今回は、アプリケーションがトースト通知を表示しようとした際に予期せず例外が発生してしまう問題についてご案内いたします。

対象 OS

本記事の公開時点でサポート対象の OS のうち、本問題の影響を受けるバージョンは以下となります。

  • Windows 11 22h2 (2023.02D - KB5022913 以降の更新プログラムを適用)

概要

対象 OS 上で動作するアプリケーションがトースト通知を表示するための処理を実行すると、OS の不具合に起因して以下のレジストリ関連の例外が発生する場合がございます。

1
2
RegistryKey.Win32Error (Int32 errorCode, String str)
System.InvalidOperationException: Cannot create a stable subkey under a volatile parent key.

対象アプリケーションにおいて上記例外をハンドリングしていない場合にはアプリケーションがクラッシュします。また、例外をハンドリングした場合でもトースト通知は表示されない動作となります。

原因

本事象は、対象 OS(2023.02D 以降の更新プログラムが適用された Windows 11 22h2)において Windows OS のコンポーネントが以下のレジストリ キーを volatile 属性で作成してしまう不具合に起因しております。

  • HKEY_CURRENT_USER\Software\Classes\AppUserModelId

アプリケーションがトースト通知を表示する際には、上記レジストリ キー配下にアプリケーション毎に non-volatile 属性でサブキーを作成する場合があります。しかしながら、OS の不具合により親キーである AppUserModelId が volatile 属性で作成されている場合、volatile 属性のレジストリ キー配下に non-volatile 属性のサブキーを作成することはできないため、前述の例外が発生いたします。
その結果、例外ハンドリングが実装されていないアプリケーションはクラッシュし、例外ハンドリングが実装されているアプリケーションでもトースト通知は表示されない動作となります。

なお、OS の不具合により上記レジストリが volatile 属性で作成されるよりも前に、上記レジストリ キーが non-volatile 属性で作成されている場合には本問題は発生いたしません。

解決策

本不具合につきましては、2023 年 9 月の更新プログラムで修正される予定となります。
そのため、恐れ入りますが恒久対策としては更新プログラムの公開をお待ちいただくようお願い申し上げます。

暫定対策としては、前述の AppUserModelId レジストリが volatile 属性で作成される前に、明示的に non-volatile 属性で作成していただくことでも本問題を回避することが可能です。
※ volatile 属性のレジストリ キーは OS 再起動により自動的に削除されますので、基本的には OS 起動直後に明示的に non-volatile 属性で作成しておくことで問題を回避可能です

変更履歴

  • 2023/06/08 : 本記事の公開

本投稿が少しでも皆様のお役に立てば幸いです。
※ 本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。