プログラムをインストール可能な機器であって、当該機器の起動時において、前記プログラムの起動処理を実行し、該起動処理の進行に応じて該進行状況を示す情報を前記プログラムの識別情報に関連付けて起動状態記憶手段に記録する起動管理手段を有し、前記起動管理手段は、前記起動処理の開始前の状態において、前記起動状態記憶手段に起動が完了していないことを示す情報が記録されている場合、起動対象を一部の前記プログラムに限定する機器。前記起動管理手段は、前記起動状態記憶手段において前記起動が完了していないことを示す情報が関連付けられている前記識別情報に係る前記プログラムを起動しない請求項1記載の機器。前記起動状態記憶手段は、インストール後、前記起動管理手段によって起動されていない前記プログラムについては、起動実績が無いことを示す情報を記憶し、前記起動管理手段は、前記起動状態記憶手段において前記起動実績が無いことを示す情報が関連付けられている前記識別情報に係る前記プログラムを起動しない請求項1記載の機器。前記起動管理手段は、メモリ消費量の多い前記プログラムから順に起動する請求項1乃至3いずれか一項記載の機器。プログラムをインストール可能な機器が、当該機器の起動時において、前記プログラムの起動処理を実行し、該起動処理の進行に応じて該進行状況を示す情報を前記プログラムの識別情報に関連付けて起動状態記憶手段に記録する起動手順を実行し、前記起動手順は、前記起動処理の開始前の状態において、前記起動状態記憶手段に起動が完了していないことを示す情報が記録されている場合、起動対象を一部の前記プログラムに限定するプログラム管理方法。前記起動手順は、前記起動状態記憶手段において前記起動が完了していないことを示す情報が関連付けられている前記識別情報に係る前記プログラムを起動しない請求項5記載のプログラム管理方法。前記起動状態記憶手段は、インストール後、前記起動手順によって起動されていない前記プログラムについては、起動実績が無いことを示す情報を記憶し、前記起動手順は、前記起動状態記憶手段において前記起動実績が無いことを示す情報が関連付けられている前記識別情報に係る前記プログラムを起動しない請求項5記載のプログラム管理方法。前記起動手順は、メモリ消費量の多い前記プログラムから順に起動する請求項5乃至7いずれか一項記載のプログラム管理方法。プログラムをインストール可能な機器に、当該機器の起動時において、前記プログラムの起動処理を実行し、該起動処理の進行に応じて該進行状況を示す情報を前記プログラムの識別情報に関連付けて起動状態記憶手段に記録する起動手順を実行させ、前記起動手順は、前記起動処理の開始前の状態において、前記起動状態記憶手段に起動が完了していないことを示す情報が記録されている場合、起動対象を一部の前記プログラムに限定するプログラム管理プログラム。前記起動手順は、前記起動状態記憶手段において前記起動が完了していないことを示す情報が関連付けられている前記識別情報に係る前記プログラムを起動しない請求項9記載のプログラム管理プログラム。前記起動状態記憶手段は、インストール後、前記起動手順によって起動されていない前記プログラムについては、起動実績が無いことを示す情報を記憶し、前記起動手順は、前記起動状態記憶手段において前記起動実績が無いことを示す情報が関連付けられている前記識別情報に係る前記プログラムを起動しない請求項9記載のプログラム管理プログラム。前記起動手順は、メモリ消費量の多い前記プログラムから順に起動する請求項9乃至11いずれか一項記載のプログラム管理プログラム。請求項9乃至12いずれか一項記載のプログラム管理プログラムを記録したコンピュータ読み取り可能な記録媒体。しかしながら、このような画像形成装置を一例とする機器は、コストアップ抑制の観点等により、搭載しているメモリの容量がPCに比較して小さい。また、プラグインアプリ等の性能を確保するため、通常、スワップは抑制される。その結果、画像形成装置は、PCに対して比較的容易にメモリ不足が発生しうる状態にある。したがって、それまで正常に動作していた画像形成装置に対してプラグインアプリが新たにインストールされ、再起動が実行された場合に、複数のプラグインアプリの起動過程においてメモリ不足が発生し、アプリケーションプラットフォーム自体の起動に失敗してしまう可能性がある。アプリケーションプラットフォームが起動されていない状態の画像形成装置においては、プラグインアプリを利用できないだけでなく、プラグインアプリのアンインストールを実行することもできない。プラグインアプリのアンインストール機能は、アプリケーションプラットフォームに実装されているからである。斯かる状態を解消するべく、画像形成装置を再起動させたとしても、同様の現象が繰り返し発生する可能性が高く、アプリケーションプラットフォームが起動されない状態の解消が困難な状況に陥ることが考えられる。本発明は、上記の点に鑑みてなされたものであって、プログラムの起動処理が不正となる状態を適切に回避することのできる機器、プログラム管理方法、プログラム管理プログラム、及び記録媒体の提供を目的とする。そこで上記課題を解決するため、本発明は、プログラムをインストール可能な機器であって、当該機器の起動時において、前記プログラムの起動処理を実行し、該起動処理の進行に応じて該進行状況を示す情報を前記プログラムの識別情報に関連付けて起動状態記憶手段に記録する起動管理手段を有し、前記起動管理手段は、前記起動処理の開始前の状態において、前記起動状態記憶手段に起動が完了していないことを示す情報が記録されている場合、起動対象を一部の前記プログラムに限定する。このような機器では、プログラムの起動処理が不正となる状態を適切に回避することができる。本発明によれば、プログラムの起動処理が不正となる状態を適切に回避することができる。以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態における画像形成装置のハードウェア構成例を示す図である。同図において、画像形成装置10は、コントローラ11、スキャナ12、プリンタ13、モデム14、操作パネル15、ネットワークインタフェース16、及びSDカードスロット17等のハードウェアを有する。コントローラ11は、CPU111、RAM112、ROM113、HDD114、及びNVRAM115等を有する。ROM113には、各種のプログラムやプログラムによって利用されるデータ等が記録されている。RAM112は、プログラムをロードするための記憶領域や、ロードされたプログラムのワーク領域等として用いられる。CPU111は、RAM112にロードされたプログラムを処理することにより、各種の機能を実現する。HDD114には、プログラムやプログラムが利用する各種のデータ等が記録される。NVRAM115には、各種の設定情報等が記録される。スキャナ12は、原稿より画像データを読み取るためのハードウェア画像読取手段である。プリンタ13は、印刷データを印刷用紙に印刷するためのハードウェア印刷手段である。モデム14は、電話回線に接続するためのハードウェアであり、FAX通信による画像データの送受信を実行するために用いられる。操作パネル15は、ユーザからの入力の受け付けを行うためのボタン等の入力手段や、液晶パネル等の表示手段等を備えたハードウェアである。ネットワークインタフェース16は、LAN等のネットワーク有線又は無線の別は問わない。に接続するためのハードウェアである。SDカードスロット17は、SDカード80に記録されたプログラムを読み取るために利用される。すなわち、画像形成装置10では、ROM113に記録されたプログラムだけでなく、SDカード80に記録されたプログラムもRAM112にロードされ、実行されうる。なお、他の記録媒体例えば、CD-ROM又はUSBUniversalSerialBusメモリ等によってSDカード80が代替されてもよい。すなわち、SDカード80の位置付けに相当する記録媒体の種類は、所定のものに限定されない。この場合、SDカードスロット17は、記録媒体の種類に応じたハードウェアによって代替されればよい。図2は、本発明の実施の形態における画像形成装置のソフトウェア構成例を示す図である。同図において、画像形成装置10は、標準アプリ151、SDKアプリ152、SDKプラットフォーム153、コントロールサービス154、及びOS155等を有する。標準アプリ151は、画像形成装置10に標準的に出荷時に予め実装されているアプリケーションプログラムの集合である。同図では、スキャンアプリ1511、印刷アプリ1512、コピーアプリ1513、及びFAXアプリ1514が例示されている。スキャンアプリ1511は、スキャンジョブを実行する。印刷アプリ1512は印刷ジョブを実行する。コピーアプリ1513は、コピージョブを実行する。FAXアプリ1514は、FAXの送信ジョブ又は受信ジョブを実行する。コントロールサービス154は、各種のハードウェアリソース等を制御するための機能を上位アプリケーションプログラム等に対して提供したり、画像形成装置10の基盤的な機能等を実行したりするソフトウェアモジュール群である。SDKアプリ152は、画像形成装置10の出荷後において、画像形成装置10の機能拡張等を図るためのプラグインとして追加的にインストールされるアプリケーションプログラムである。したがって、SDKアプリ152の機能は、所定のものに限定されない。例えば、各SDKアプリ152は、SDカード80から又はネットワークを介して画像形成装置10にインストールされ、SDKプラットフォーム153上において一つのスレッドとして起動される。SDKプラットフォーム153は、SDKアプリ152の実行環境を実現する。各SDKアプリ152は、SDKプラットフォーム153が提供するAPIApplicationProgramInterfaceを利用して開発される。例えば、SDKプラットフォーム153は、スキャン機能を利用させるためのインタフェース、印刷機能を利用させるためのインタフェース、コピー機能を利用させるためのインタフェース等をSDKアプリ152に提供する。SDKプラットフォーム153のAPIは公開されており、サードベンダ等によってもSDKアプリ152は開発されうる。また、当該APIは、異機種間において平滑化されている。したがって、SDKアプリ152に関して、機種に応じて異なる実装が行われる必要性は低い。なお、SDKプラットフォーム153は、それ自体、画像形成装置10にインストールされるアプリケーションプログラムの一種である。例えば、SDKプラットフォーム153は、SDカード80から又はネットワークを介して画像形成装置10にインストールされる。但し、SDKプラットフォーム153は、SDKアプリ152とは異なり、OS155上で一つのプロセスとして動作する。OS155は、いわゆるOSOperatingSystemである。画像形成装置10上の各ソフトウェアは、OS155上においてプロセス又はスレッドとして動作する。図3は、SDKプラットフォームの機能構成例を示す図である。同図において、SDKプラットフォーム153は、インストール部161、アンインストール部162、起動管理部163、起動判定部164、起動順管理部165、メモリ状態管理部166、及び起動状態記憶部167等を含む。インストール部161は、SDKアプリ152のインストール追加を実行する。インストール部161は、インストールに成功したSDKアプリ152のうち、自動起動の指定がなされたSDKアプリ152の識別子以下、プロダクトIDという。を含むレコード以下、起動状態レコードという。を起動状態記憶部167に生成する。起動状態レコードは、当該SDKアプリ152の起動状態を管理するためのレコードである。インストール部161は、自らが生成した起動状態レコードに対して、起動状態の初期値である、0を記録する。起動状態とは、SDKアプリ152の起動処理の進行状況を示す情報の一例である。本実施の形態において、起動状態は、起動処理の進行に応じて以下の値を取り得る。0:インストール直後1:初回起動中2:起動完了3:2回目以降の起動中各値0~3の意味については、改めて詳細に説明する。なお、自動起動とは、画像形成装置10の起動過程における、起動管理部163による自動的なSDKアプリ152の起動形態をいう。各SDKアプリ152のインストール時において、起動形態に関して自動起動又は手動起動のいずれかが選択される。手動起動とは、ユーザによって任意のタイミングで操作パネル15等を介して入力される起動指示に応じて起動される起動形態をいう。通常は、自動起動が選択される。したがって、本実施の形態では、インストールされている全てのSDKアプリ152が、自動起動の対象とされていることとする。すなわち、以下において、インストールされている全てのSDKアプリ152とは、インストールされており、かつ、自動起動の対象とされている全てのSDKアプリ152を意味する。起動状態記憶部167は、例えば、NVRAM115又はHDD114等を用いて、画像形成装置10にインストールされている各SDKアプリ152の起動状態レコードを記憶する。アンインストール部162は、SDKアプリ152のアンインストール削除を実行する。アンインストール部162は、アンインストールされたSDKアプリ152のプロダクトIDを含む起動状態レコードを、起動状態記憶部167より削除する。起動管理部163は、画像形成装置10の電源投入に応じた起動過程において、画像形成装置10にインストールされている全てのSDKアプリ152について起動処理を実行する。起動管理部163は、起動処理の進行に応じ、起動処理の対象とされているSDKアプリ152の起動状態レコードを更新する。起動判定部164は、起動状態記憶部167等を参照して、画像形成装置10にインストールされている各SDKアプリ152の起動の許否又は是非若しくは当否を判定する。起動順管理部165は、所定の場合において、SDKアプリ152の起動順を決定する。メモリ状態管理部166は、SDKアプリ152の起動処理中にメモリ不足が発生した場合に、その旨を示す値以下、メモリ不足フラグというを、例えば、NVRAM115又はHDD114等に記録する。以下、画像形成装置10の処理手順について説明する。図4は、第一の実施の形態の画像形成装置の起動時に実行される処理手順の一例を説明するためのフローチャートである。画像形成装置10に電源が投入されると、画像形成装置10は、初期化処理を開始する。初期化処理の過程すなわち、起動時において、OS155、コントロールサービス154、各標準アプリ151、SDKプラットフォーム153の順に、各プログラムが起動される。SDKプラットフォーム153は、自らの起動過程において、画像形成装置10にインストールされている各SDKアプリ152を起動させる。図4は、斯かるタイミングにおける、SDKプラットフォーム153によるSDKアプリ152の起動処理を説明するものである。ステップS101において、起動管理部163は、メモリ不足フラグの記録の有無を確認する。後述より明らかなように、ここで確認されるメモリ不足フラグは、前回の画像形成装置10の起動時におけるものである。続いて、起動管理部163は、メモリ不足フラグの記録状態を初期化するS102。例えば、メモリ不足フラグが記録されている場合、当該メモリ不足フラグが削除される。次回の起動時において、前回次回から見た場合の前々回の起動時のメモリ不足フラグが有効とならないようにするためである。続いて、起動管理部163は、メモリ不足フラグの有無に応じて処理を分岐させるS103。すなわち、メモリ不足フラグが記録されていない場合S103でNo、起動管理部163は、通常の順番でSDKアプリ152を一つ選択するS104。通常の順番とは、例えば、プロダクトIDの昇順である。続いて、起動管理部163は、選択されたSDKアプリに関して起動処理を実行するS105。ステップS104及びS105は、画像形成装置10にインストールされている全てのSDKアプリ152に関して繰り返し実行されるS110。なお、フローチャートによれば、ステップS104及びS105は、SDKアプリ152ごとに直列的にシーケンシャルに実行されるように表現されている。しかし、全てのSDKアプリ152の起動処理の処理時間の短縮化等を図るために、起動処理ここでは、ステップS104及びS105をいうごとにスレッドが生成されてもよい。すなわち、各SDKアプリ152の起動処理は、並列的に実行されてもよい。ここで、ステップS105における、SDKアプリ152の起動処理の詳細について説明する。図5は、SDKアプリの起動処理の処理手順の一例を説明するためのフローチャートである。なお、起動処理の対象とされているSDKアプリ152を、対象アプリという。ステップS201において、起動管理部163は、現時点において起動状態記憶部167に記録されている、対象アプリの起動状態を確認する。現時点における起動状態とは、対象アプリの起動前の起動状態である。すなわち、画像形成装置10の前回の起動時等において記録された起動状態である。図6は、起動状態記憶部の構成例を示す図である。同図において、起動状態記憶部167は、画像形成装置10にインストールされているSDKアプリ152ごとに起動状態レコードを記憶する。各起動状態レコードは、対応するSDKアプリ152のプロダクトID及び起動状態を記憶する。同図では、各SDKアプリ152の起動状態は2又は0である。2は、正常に起動が完了したときに起動管理部163によって記録される値である。0は、正常にインストールが完了したときにインストール部161によって起動される値である。図6に示される内容に基づいて、各SDKアプリ152について、次のことが分かる。プロダクトIDが0x0005のSDKアプリ152は、前回の起動処理において正常に起動が完了している。プロダクトIDが0x000f又は0x0001の二つのSDKアプリ152は、画像形成装置10が前回起動された際に、インストールされたSDKアプリ152であり、自動起動は1度も実行されていない。対象アプリの現時点の起動状態が、0又は1である場合、起動管理部163は、起動状態記憶部167における対象アプリの起動状態に、1を記録するS202。すなわち、この場合、対象アプリは、過去において一度も起動されていない又は起動に成功していないため、初回の起動処理の実行中初回起動中を示す1が、起動状態とされる。すなわち、0又は1は、起動実績が無いことを示す情報の一例である。一方、対象アプリの現時点の起動状態が、2又は3である場合、起動管理部163は、起動状態記憶部167における対象アプリの起動状態に、3を記録するS203。すなわち、この場合、対象アプリは、過去において少なくとも一度は起動されているため、2回目以降の起動処理の実行中初回起動中を示す3が、起動状態とされる。図7は、起動開始時の起動状態記憶部の状態の一例を示す図である。同図では、プロダクトIDが、0x0005であるSDKアプリ152が対象アプリである例が示されている。当該SDKアプリ152の起動状態は、図6において2であった。したがって、ステップS203の実行により、3に更新されている。続いて、起動管理部163は、対象アプリに対して起動指示を入力するS204。対象アプリは、起動指示に応じ、自らの初期化処理等を実行する。初期化処理等において、対象アプリは、必要に応じてメモリ領域ヒープ領域の確保等を行う。対象アプリの起動が完了するとS205でYes、起動管理部163は、起動状態記憶部167における対象アプリの起動状態に、2を記録するS206。すなわち、対象アプリに関して、正常に起動処理が完了したこと起動完了が記録される。なお、起動管理部163は、対象アプリの起動が完了したことを、例えば、起動指示に対する応答により検知することができる。起動指示に対する応答とは、対象アプリが同期的な関数又はメソッド等を介して起動指示を受け付ける場合、当該関数又はメソッド等の呼び出しからの復帰に相当する。一方、対象アプリが非同期な関数又はメソッド等を介して起動指示を受け付ける場合、対象アプリは、起動が完了し、定常状態となったタイミングにおいて、起動の完了通知を起動管理部163に入力すればよい。一方、対象アプリの起動指示後であって起動完了前つまり、対象アプリの起動中において、メモリ不足の例外が発生した場合S207でYes、メモリ状態管理部166は、メモリ不足フラグをNVRAM115又はHDD114等に記録するS208。この場合、対象アプリは起動されず、図4の処理も中断される。したがって、既に起動されているSDKアプリ152以外は起動されない。また、場合によっては、SDKプラットフォーム153のプロセスも終了してしまう。その場合、SDKプラットフォーム153上においてスレッドとして起動されている各SDKアプリ152も終了してしまう。いずれにおいても、ユーザは、SDKアプリ152を利用することはできない。なお、例外発生時において、対象アプリに関して起動状態記憶部167が記憶している起動状態は、1又は3である。すなわち、1又は3は、起動が完了していないことを示す一例である。メモリ不足が発生した後に、画像形成装置10の再起動等が実行された場合に、図4のステップS101において、メモリ不足フラグが記録されていることが確認される。なお、メモリ状態管理部166がメモリ不足フラグを記録するのは、図4及び図5の処理の実行中における、強制的な電源断停電等による起動処理の中断と区別するためのである。すなわち、起動状態記憶部167を参照することにより、前回の起動時において起動処理に失敗したSDKアプリ152の有無は確認することができる。しかし、起動状態記憶部167のみでは、起動処理の失敗の原因が、メモリ不足によるものなのか強制的な電源断によるものなのかは分からない。但し、メモリ不足が発生した場合、メモリ状態管理部166によるメモリ不足フラグの記録もできない可能性もある。このような可能性が高い場合は、メモリ不足フラグは利用されなくてもよい。この場合、ステップS101では、起動状態記憶部167を参照して、前回の起動処理に失敗しているすなわち、起動状態の値が1又は3であるSDKアプリ152の有無を確認すればよい。該当するSDKアプリ152が存在しない場合は、ステップS104及びS105が実行され、該当するSDKアプリ152が存在する場合は、ステップS106~S109が実行されるようにすればよい。メモリ不足フラグが記録されていた場合図4:S103でYes、起動順管理部165は、起動対象とするSDKアプリ152を選択するS106。例えば、起動順管理部165は、メモリヒープの消費量の多いSDKアプリ152から順に起動対象を選択する。すなわち、起動時において一時的に多くのメモリを消費し、起動完了時のメモリ消費量は小さくなるつまり、メモリの消費に関して起動時に山の有るSDKアプリ152の存在も考えられる。仮に、このようなSDKアプリ152が、既に多数のSDKアプリ152の起動が完了し、メモリの残量が少なくなっているときに起動された場合、一時的なメモリ消費量の山を許容できるだけのメモリ残量が無いために、メモリ不足が発生することも考えられる。そこで、一時的なメモリの大量消費を許容可能な、メモリの残量が多いときに、メモリ消費量の多いSDKアプリ152を起動させることで、メモリ不足発生回避し、全てのSDKアプリ152を起動できる可能性を高めようというわけである。なお、起動時のメモリ消費量については、SDKアプリ152の開発ベンダからの申請値が、SDKアプリ152の属性情報として、SDKアプリ152のインストール時にNVRAM115又はHDD115に記録されればよい。又は、インストール部161は、インストール時等において、SDKアプリ152の試行的な起動仮起動を実行し、その際にメモリの消費量を測定し、測定結果をNVRAM115又はHDD115に記録してもよい。または、起動順管理部165は、メモリ不足が発生した後の起動時におけるSDKアプリ152の優先順位をNVRAM115又はHDD114等を用いて管理していてもよい。この場合、起動順管理部165は、当該優先順位の上位から順に一つのSDKアプリ152を起動対象として選択する。更に、起動順管理部165は、インストールされた順番に起動対象を選択してもよい。インストール順に起動対象が選択されることで、新たなSDKアプリ152の起動時期を最後にすることができる。そうすることで、後述される、起動判定部164による判定との組合せにより、より多くのSDKアプリ152を起動できる可能性を高めることができる。インストールされた順番は、例えば、起動状態記憶部167におけるレコード順によって判定されてもよいし、SDKアプリ152のインストール時に、インストール部161によって別途インストール順を示す情報が記録され、当該情報に基づいて判定されてもよい。なお、メモリ不足フラグが記録されていた場合S103でYesでも、通常の起動順によってSDKアプリ152が起動されてもよい。続いて、起動判定部164は、起動順管理部165によって起動対象とされたSDKアプリ152以下対象アプリという。について、起動状態記憶部167を参照して、起動の許否を判定するS107。例えば、起動判定部164は、前回の起動処理において起動に失敗しているSDKアプリ152については起動を許可せず、それ以外のSDKアプリ152については起動を許可する。具体的には、対象アプリの起動状態が、1又は3である場合、起動は許可されず、それ以外の場合、起動は許可される。起動状態が1又は3であるSDKアプリ152は、前回の起動処理において、起動中にメモリ不足が発生したSDKアプリ152である。したがって、当該SDKアプリ152が起動されると再度メモリ不足が発生する可能性があるからである。または、起動判定部164は、最後にインストールされたSDKアプリ152については起動を許可せず、それ以外のSDKアプリ152については起動を許可する。具体的には、対象アプリの起動状態が、0又は1である場合、起動は許可されず、それ以外の場合、起動は許可される。このような判定は、全てのSDKアプリ152の起動に成功していた状態を再現しようという考えに基づく。すなわち、新たなSDKアプリ152のインストールによってメモリ不足が発生したのであるから、当該新たなSDKアプリ152の起動を抑止しようというものである。起動判定部164によって対象アプリの起動が許可された場合S108でYes、起動管理部163は、対象アプリに関して起動処理を実行するS109。当該起動処理の内容は、図5において説明した通りである。但し、ステップS109における起動処理では、起動管理部163は、各SDKアプリ152の起動のタイミングが直列的になるように制御してもよい。すなわち、起動管理部163は、起動処理を実行するスレッドを並列的に動作させるのではなく、一つのSDKアプリ152の起動処理が完了するのを待機して、次のSDKアプリ152の起動処理を実行するようにしてもよい。起動時に多量のメモリを消費するSDKアプリ152が複数存在した場合に各SDKアプリ152が並列的に起動されると、メモリの消費量のピークが重なることによるメモリ不足が発生することが考えられる。起動処理を直列的にすることにより、このような現象を回避することができる。一方、起動判定部164によって対象アプリの起動が許可されない場合S108でNo、対象アプリの起動処理は実行されない。上記したステップS106からS109は、画像形成装置10にインストールされている全てのSDKアプリ152に関して実行されるS110。なお、ステップS106からS109は、通常、前回の画像形成装置10の起動時において、メモリ不足が発生した場合に実行される処理である。当該処理においては、上述したように、起動判定部164によって、メモリ不足の発生が出来るだけ回避されるように、起動対象とするSDKアプリ152が一部のSDKアプリ152に限定される。したがって、前回に続いてメモリ不足が発生する可能性を低減させることができる。すなわち、SDKアプリ152の起動処理が不正となる状態を適切に回避することができる。その結果、SDKプラットフォーム153が正常に起動される可能性を高めることができる。SDKプラットフォーム153が正常に起動されれば、ユーザ等は、アンインストール部162を介して、不要な又は優先度の低いSDKアプリ152をアンインストールすることができる。そうすれば、以降においてメモリ不足が発生する可能性を低減させることができる。なお、ステップS103でYesの場合に、起動管理部163は、全てのSDKアプリ152について自動起動を行わないようにしてもよい。この場合、起動管理部163は、例えば、操作パネル15に、メモリ不足が発生したことを表示し、起動対象とするSDKアプリ152をユーザに選択させるようにしてもよい。次に、第二の実施の形態について説明する。図8は、第二の実施の形態の画像形成装置の起動時に実行される処理手順の一例を説明するためのフローチャートである。図8の開始時点における画像形成装置10の状態は、図4の開始時点における画像形成装置10の状態と同様である。すなわち、図8は、SDKプラットフォーム153の起動過程における、SDKプラットフォーム153によるSDKアプリ152の起動処理を説明するものである。ステップS301において、起動管理部163は、メモリ容量の残量ヒープ領域の残量が、閾値以上であるか否かを判定する。閾値は、例えば、予め設定され、HDD114又はNVRAM115等に記憶されていてもよい。または、SDKアプリ152ごとに、起動時のメモリ消費量が、SDKアプリ152の属性情報として、NVRAM115又はHDD115に記録されている場合は、全てのSDKアプリ152のメモリ消費量の中の最大値α、又は次に起動対象とされるSDKアプリ152のメモリ消費量αが、閾値として、起動管理部163によって動的に例えば、ステップS301の実行時において決定されてもよい。αは、例えば、SDKプラットフォーム153の正常な起動に必要なメモリ容量である。各SDKアプリ152の起動時のメモリ消費量は、第一の実施の形態と同様に、SDKアプリ152の開発ベンダからの申請値であってもよいし、SDKアプリ152の試行的な起動仮起動の際の測定値であってもよい。続いて、メモリ容量の残量が、閾値以上である場合S301でYes、起動管理部163は、通常の順番でSDKアプリ152を一つ選択するS302。通常の順番とは、例えば、プロダクトIDの昇順である。続いて、起動管理部163は、選択されたSDKアプリに対して起動指示を入力するS303。インストールされている全てのSDKアプリ152に関して起動指示が入力されるとS304でYes、全てのSDKアプリ152が利用可能な状態で、画像形成装置10が起動される。一方、各SDKアプリ152の起動の過程において、メモリ容量の残量が、閾値未満になったことが検出されるとS301でNo、起動管理部163は、これまでに起動された全てのSDKアプリ152のスレッドを終了させる。その結果、これまでに起動されたSDKアプリ152によって消費されたメモリ容量は解放され、SDKプラットフォーム153は、正常に起動される。続いて、起動管理部153は、SDKアプリ152を終了させたことをユーザに通知するS306。例えば、起動管理部153は、メモリ不足のためSDKアプリ152の起動を行わなかったことを示すメッセージを操作パネル15に表示させる。ユーザは、当該メッセージを参照することで、SDKアプリ152は起動されなかったことを確認することができる。SDKプラットフォーム153が正常に起動された状態で画像形成装置10が起動されることで、ユーザは、不要なSDKアプリ152のアンインストールをSDKプラットフォーム153に指示したり、自動起動の対象とされている一部のSDKアプリ152に関して自動起動を解除するようにSDKプラットフォーム153に指示したりすることができる。その結果、全てのSDKアプリ152が利用できない状態で、画像形成装置10が起動されるといった事態の再発を回避することができる。なお、ステップS305が実行されないようにしてもよい。すなわち、それまでに起動されたSDKアプリ152は起動されたままとされてもよい。但し、全てのSDKアプリ152を終了させた方が、SDKプラットフォーム153が正常に起動される可能性を高めることができる。また、メモリ容量の残量が閾値未満であることが検知された場合、未だ起動されていないSDKアプリ152のうち、起動時のメモリの消費量が、閾値未満であるSDKアプリ152に関して、起動処理が継続されてもよい。すなわち、起動時のメモリの消費量が、閾値以上であるSDKアプリ152に関して、起動が行われないようにしてもよい。上述したように、第二の実施の形態によれば、画像形成装置10の再起動を行わずとも、SDKプラットフォーム153が正常に起動させることができる。なお、上記各実施の形態は、プログラムをインストール可能な機器であれば、例えば、プロジェクタ、スマートフォン、携帯電話、又はデジタルカメラ等、画像形成装置10以外の機器に適用されてもよい。以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形変更が可能である。