Windows API Code Packによるアプリ開発 第2回 ~アプリケーションの再起動と修復 その1~

Windows API Code Packによるアプリ開発 [TechED2010 ポストセッション]
第2回 アプリケーションの再起動と修復 その1

作成したアプリケーションが、思わぬバグで落ちてしまった経験はありませんか?
どんなに熟練したベテランの開発者でも、バグが皆無というアプリケーションを作成することは難しいことです。
完成したアプリケーションを使っているときに、アプリケーションが落ちてしまうということは、あってはならないことです。
しかし、現実には納品したアプリケーションが客先で落ちてしまうという経験をした方は、少なくはないのではないでしょうか。

アプリケーションが落ちてしまったときに予測される問題は、保存していなかったデータが消えてしまうことです。
こまめにデータを保存していれば、データが消えてもそれほど支障がない場合があります。
たまたまデータを保存し忘れていたときにアプリケーションが落ちてしまい、なくなってしまったデータの大きさにショックを覚える経験をされた方も多いでしょう。

Windows API Code Packで提供しているアプリケーションの再起動と修復の機能を活用すると、予期せぬエラーによってアプリケーションが落ちた時でも、入力中のデータを保存し、再現することができます。
皆さんは、アプリケーションが落ちた時に表示される以下のダイアログを見たことがあるでしょうか?

このダイアログは、Windows Error ReportingというWindowsに搭載されている機能により表示されるものです。
このWindows Error Reportingに、アプリケーションのデータを復元させる機能があり、Code Packでその機能を簡単に使えるようにしています。

データの修復の仕組みを図示したものが、以下の図です。

四角で囲ってある部分を実装するだけで、予期せぬエラーが発生した時にデータを保存/復元できるようになります。
簡単に、どのようなものを実装するかを説明します。

1. アプリケーションがクラッシュした時に、データを保存するメソッド (修復用メソッド) を作成します。
図の左下にある「修復用メソッドによるデータの保存」の部分が該当します。
このメソッドは、アプリケーションがクラッシュした時にWindows Error Reportingによって呼ばれるメソッドです。
このメソッドに、未保存のデータを保存するコードを実装します。
図では、「修復用メソッド」と呼んでいます。

2. 修復用メソッドの登録
クラッシュ時に、Windows Error Reportingによって修復用メソッドが呼ばれるように、登録を行います。
登録したメソッドが、クラッシュ時に自動的に呼ばれます。
図の左上の部分に該当します。

3. 再起動用コードの登録
アプリケーションがクラッシュした時には、Windows Error Reportingによってアプリケーションが再起動されます。
その時に、アプリケーション側で、通常に起動したのか、クラッシュによって再起動をしたのかを判別する必要があります。
通常に起動した場合と、クラッシュによって再起動した場合は、アプリケーションの起動時にコマンドライン オプションを指定することにより、判別を可能にできます。
ここでは、再起動かどうかの判別を行うために、クラッシュによる再起動の場合に指定するコマンドライン オプションを登録します。
図の左上の部分に該当します。

4. 再起動かどうかの判別
アプリケーションの起動時に、指定されているコマンドライン オプションの値によって、通常の起動かクラッシュによる再起動かを判別します。
図の右上の部分に該当します。

5. データの復元
クラッシュによる再起動の場合には、1の過程で保存しておいたデータを読み込み、データを復元させます。
図の右下の部分に該当します。

全体の流れを図示すると、以下のようになります。

全体の仕組みは、この図のようになっています。
次回は、Visual StudioとWindows API Code Packを使用した実装方法を紹介します。

[参考資料]
TechEDでのビデオとスライド
https://msdn.microsoft.com/ja-jp/events/ff973814.aspx
内容を早く知りたい方や、デモを確認されたい方は、ビデオをご覧ください。

Windows API Code PackによるWindowsアプリ開発 [TechEDポストセッション]
第1回 : Windows API Code Packとは
第2回 : アプリケーションの再起動と修復 その1
第3回 : アプリケーションの再起動と修復 その2
その後は、電源管理、タスクバーというように進める予定です。

[お知らせ]
Windows 7 アプリ投稿キャンペーンを実施中です。
https://msdn.microsoft.com/ja-jp/windows/jpwin7cp01.aspx
第5回目あたり以降で説明するタスクバーの機能を、既に作っているアプリケーションに追加するだけで、キャンペーンに参加できます。
タスクバーの説明はあと数日お待ちください。

マイクロソフト
田中達彦