"コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求を受信するステップと、前記要求を受信するステップに応答して、オペレーティングシステムの状態とは独立に前記アプリケーションの前記ランタイム状態を収集し、さらに前記ランタイム状態を永続化するステップとのためのコンピュータにより実施される工程を実行することを含むことを特徴とするコンピュータにより実施される方法。前記アプリケーションの前記ランタイム状態を復元する要求を受信するステップと、前記アプリケーションの前記ランタイム状態を復元する前記要求を受信するステップに応答して、前記アプリケーションの前記ランタイム状態を復元し、さらに前記復元されたアプリケーションを実行するステップとをさらに含むことを特徴とする請求項1に記載のコンピュータにより実施される方法。前記アプリケーションの前記ランタイム状態を永続化するステップの後に変更されたリソースに関する前記アプリケーションからの要求を変換するためのプロキシ層を設けるステップをさらに含むことを特徴とする請求項2に記載のコンピュータにより実施される方法。前記ランタイム状態を永続化するステップの後、前記ランタイム状態を復元するステップの前に、前記コンピュータ上でメンテナンス工程を実行するステップをさらに含むことを特徴とする請求項3に記載のコンピュータにより実施される方法。前記アプリケーションは、仮想化されたアプリケーションを含むことを特徴とする請求項3に記載のコンピュータにより実施される方法。前記ランタイム状態は、メモリ内容と、レジスタコンテキストと、命令ポインタとを含むことを特徴とする請求項5に記載のコンピュータにより実施される方法。コンピュータにより実行されると、前記コンピュータにコンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求を受信させ、前記要求を受信させたことに応答して、オペレーティングシステムの状態とは独立に前記アプリケーションの前記ランタイム状態を収集させ、前記ランタイム状態を永続化させ、前記アプリケーションの前記ランタイム状態を復元する要求を受信させ、前記アプリケーションの前記ランタイム状態を復元する前記要求を受信させたことに応答して、前記アプリケーションの前記ランタイム状態を復元させ、前記復元されたアプリケーションを実行させるコンピュータ実行可能命令をその上に格納していることを特徴とするコンピュータ可読記録媒体。前記コンピュータにより実行されると、前記コンピュータに、前記アプリケーションの前記ランタイム状態を永続化した後に変更された1つまたは複数のリソースに関する前記アプリケーションからの要求を変換するためのプロキシ層を設けさせるさらなるコンピュータ実行可能命令をその上に格納していることを特徴とする請求項7に記載のコンピュータ可読記録媒体。前記コンピュータにより実行されると、前記コンピュータに、前記ランタイム状態を、前記コンピュータの処理負荷を負荷分散させるように前記コンピュータから第2のコンピュータに移させるさらなるコンピュータ実行可能命令をその上に格納していることを特徴とする請求項8に記載のコンピュータ可読記録媒体。前記ランタイム状態は、前記ランタイム状態が収集された時点のシステムリソース状態、ユーザインターフェース状態、ネットワーク接続状態、および前記ランタイム状態が収集された時点で前記アプリケーションにより使用中であった1つまたは複数のファイルリソースをさらに含むことを特徴とする請求項9に記載のコンピュータ可読記録媒体。アプリケーションのランタイム状態を格納するため、および再開するための技術が、本明細書で説明される。本明細書で開示される概念および技術の実施形態を介して、実行されているアプリケーションのランタイム状態を、そのアプリケーションが実行されているオペレーティングシステムのランタイム状態とは独立にキャプチャし、保存することができる。次に、そのアプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。また、そのアプリケーションのランタイム状態は、コンピュータの処理負荷を負荷分散するために、別のコンピュータに移されることも可能である。これらのメンテナンス工程が完了すると、アプリケーションのランタイム状態が復元されることが可能であり、さらにアプリケーションの実行が、ランタイム状態がキャプチャされた時点にアプリケーションが入っていた状態で再開されることが可能である。このようにして、保存されていないアプリケーションデータを消失することなしに、メンテナンス工程を実行することができる。本明細書で提示される一態様によれば、コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求が受信される。例えば、IT管理者が、そのような要求を行う場合がある。そのような要求を受信したことに応答して、アプリケーションの実行が一時停止され、さらにアプリケーションのランタイム状態が、アプリケーションが実行されているオペレーティングシステムとは独立に収集される。ランタイム状態は、物理メモリおよび仮想メモリ、中央処理装置CPUレジスタ、ならびに命令ポインタの内容を含むことが可能である。また、ランタイム状態は、システムリソース、ユーザインターフェースUIリソース、およびネットワーク接続の状態を含むことも可能である。また、ランタイム状態は、ランタイム状態が収集される際にアプリケーションにより使用中の任意のファイルリソースを含むことも可能である。ランタイム状態が収集されると、ランタイム状態は、ランタイム状態を大容量ストレージデバイスに保存することなどにより永続化される。ランタイム状態が永続化された後、アプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。例えば、アプリケーションが実行されていたコンピュータのハードウェア上で、またはオペレーティングシステム上でメンテナンス工程を実行することができる。さらに、アプリケーションのランタイム状態を、別のコンピュータに移すことが可能である。このことは、例えば、アプリケーションが実行されていたコンピュータの処理負荷を負荷分散するために、望ましい場合がある。メンテナンス工程が完了すると、IT管理者などから、アプリケーションの実行を再スタートする要求を受信することができる。アプリケーションの実行を再スタートするために、アプリケーションのランタイム状態が復元される。例えば、メモリ、レジスタ、および命令ポインタの内容を、復元することができる。また、システムリソース、UIリソース、およびネットワーク接続の状態を復元することも可能である。ファイルリソースがランタイム状態に含められていた場合、それらのファイルリソースを復元することも可能である。アプリケーションのランタイム状態を復元すると、アプリケーションの実行を、アプリケーションが一時停止されたポイントから再スタートすることができる。このようにして、アプリケーションは、アプリケーションの実行が一時停止された時点にアプリケーションが入っていた状態で再開することができる。別の態様によれば、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関して、アプリケーションから受信された要求を変換するためのプロキシ層が提供される。例えば、アプリケーションが、アプリケーション状態のキャプチャの直前に、アプリケーションの実行が再開された際に利用できないネットワークポート番号を利用した場合、プロキシ層が、アプリケーションに知られているネットワークポート番号と新たなネットワークポート番号の間で変換を行う。また、他のタイプの変換を、変更された名前、番号、ロケーション、または他の識別する情報を有する他のタイプのリソースに関して実行することも可能である。本明細書で開示される実施形態は、仮想化されたアプリケーション、ハードウェア仮想化環境において実行される仮想化されていないアプリケーション、仮想化されていない環境において実行される仮想化されていないアプリケーション、および他のタイプのアプリケーションに関連して利用できることを理解されたい。また、この概要は、特許請求される主題の重要な特徴、または不可欠な特徴を特定することを意図しておらず、この概要が、特許請求される主題の範囲を限定するのに使用されることも意図していないことも理解されたい。さらに、特許請求される主題は、本開示のいずれかの部分に記載されるいずれかの欠点を解決する実施形態にも、そのようなすべての欠点を解決する実施形態にも限定されない。以下の詳細な説明は、アプリケーションランタイム状態を格納するため、および再開するための技術を対象とする。上記で簡単に説明したとおり、実行されているアプリケーションのランタイム状態を、そのアプリケーションが実行されているオペレーティングシステムのランタイム状態とは独立にキャプチャし、保存することができる。次に、そのアプリケーションが実行されていたオペレーティングシステム上、またはコンピュータ上でメンテナンス工程を実行することができる。また、そのアプリケーションのランタイム状態を、コンピュータの処理負荷を負荷分散するために、別のコンピュータに移すことも可能である。その後、そのアプリケーションのランタイム状態を復元することができる。アプリケーションのランタイム状態が復元されると、アプリケーションの実行を、アプリケーションが一時停止されたポイントから再スタートすることができる。また、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関して、アプリケーションから受信された要求を変換するのにプロキシ層を利用することも可能である。以上、およびその他の特徴に関するさらなる詳細は、図1乃至図9に関連して以下で説明される。本明細書で説明される主題は、コンピュータシステム上のオペレーティングシステムおよびアプリケーションプログラムの実行に関連して実行されるプログラムモジュールの一般的な脈絡で提示されるが、他の実施形態が、他のタイプのプログラムモジュールと組み合わせて実行されてもよいことが当業者には認識されよう。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、構成要素、データ構造、および他のタイプの構造が含まれる。さらに、本明細書で説明される主題は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電子機器またはプログラマブル家庭用電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む、他のコンピュータシステム構成で実施されてもよいことが当業者には理解されよう。以下の詳細な説明において、本明細書の一部分を形成するとともに、特定の実施形態または実施例の例示として示される添付の図面を参照する。以下に、いくつかの図で同様の参照符号が同様の要素を表すそれらの図面を参照して、アプリケーションのランタイム状態を格納するため、および再開するためのコンピューティングシステムおよびコンピューティング方法の態様を説明する。図1は、本明細書で開示される実施形態に関する1つの例示的な動作環境100を示すソフトウェアおよびネットワークのアーキテクチャ図である。図1に示される例示的な動作環境100は、本明細書でアプリケーション106と呼ぶ場合がある仮想化されたアプリケーション106を実行するための環境を提供するように構成されたコンピュータ108を含む。この機能を提供するために、コンピュータ108は、オペレーティングシステム104と、アプリケーション仮想化層102とを含む。コンピュータ108は、アプリケーションランタイム状態を格納するため、および再開するための本明細書で提示される工程を実行することができる標準のデスクトップコンピュータもしくはラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータ、スマートフォン、または他の任意のコンピューティングデバイスであり得る。アプリケーション仮想化層102は、アプリケーション仮想化環境を提供するように構成されたソフトウェア構成要素である。これに関して、アプリケーション仮想化層102は、アプリケーション106を実行するように構成される。アプリケーション仮想化層102は、アプリケーションの実行をオペレーティングシステム104からカプセル化するための機能を提供する。また、アプリケーション仮想化層102は、アプリケーション106の実行を、コンピュータ108の他のアプリケーションプログラムおよびシステムリソースからカプセル化するための機能を提供することも可能である。例えば、アプリケーション仮想化層102は、オペレーティングシステム104またはコンピュータ108のリソースを仮想化することが可能である。アプリケーション106が、実際のリソースにアクセスしようと試みた場合、アプリケーション仮想化層102が、仮想化されたリソースを、使用されるようにアプリケーション106に提示する。このようにして、アプリケーション106は、オペレーティングシステム104またはコンピュータ108により公開される実際のリソースに影響を与えない様態で実行することができる。他の態様によれば、アプリケーション仮想化層102は、サーバコンピュータ図示せずからオンデマンドでアプリケーション106のいくつかの部分をロードするための機能を提供する。詳細には、アプリケーション仮想化層102は、サーバ構成要素と連携して動作して、アプリケーション106の必要とされる部分をサーバからコンピュータ108にストリーミングする。このようにして、アプリケーション106は、コンピュータ108においてオンデマンドでアクセスすることができる。さらに、アプリケーション106の必要とされる部分だけがサーバからコンピュータ108にストリーミングされる場合があるため、アプリケーション106全体をサーバからコンピュータ108に送ることなしに、アプリケーション106へのアクセスを提供することができる。アプリケーション仮想化層102の機能に関するさらなる詳細は、参照によりそれぞれ全体が明確に本明細書に組み込まれている、2007年5月29日に出願した、SystemandMethodsforDeliveringContentoveraComputerNetworkという名称の米国特許第7,225,264号明細書、2007年4月3日に出願した、MethodandSystemforServingSoftwareApplicationstoClientComputersという名称の米国特許第7,200,632号明細書、2008年11月11日に出願した、OperatingSystemAbstractionandProtectionLayerという名称の米国特許第7,451,451号明細書、および2010年9月14日に出願した、ServingSoftwareApplicationsfromServersforClientComputersという名称の米国特許第7,797,372号明細書において見ることができる。本明細書で開示される実施形態は、仮想化されたアプリケーション106のランタイム状態を格納すること、および再開することの脈絡で主に提示されるが、本明細書で開示される実施形態は、他のタイプのアプリケーションで利用してもよいことを理解されたい。例えば、本明細書で開示される実施形態は、ハードウェア仮想化環境において実行される仮想化されていないアプリケーションを格納し、さらに再開するのに利用することも可能である。また、本明細書で開示される実施形態は、仮想化されていない環境において実行されるアプリケーションに関連して利用することも可能である。また、本明細書で開示される実施形態は、当業者に知られている他のタイプの環境において実行されているアプリケーションに関連して利用することも可能である。アプリケーション106のランタイム状態を格納するため、および再開するための本明細書で開示される技術に関するさらなる詳細は、図2乃至図9に関連して以下で提供される。図2は、本明細書で開示される一実施形態による、アプリケーション106のランタイム状態を格納するため、および再開するための本明細書で開示されるいくつかのソフトウェア構成要素の態様を示すコンピュータソフトウェアアーキテクチャ図である。詳細には、図2は、アプリケーション106のランタイム状態202をキャプチャし、永続化し、さらに復元するように実施形態において構成され得るいくつかのソフトウェア構成要素を示す。ランタイム状態202は、アプリケーション106の現在の実行コンテキストを定義するデータである。以下でより詳細に説明されるとおり、ランタイム状態202は、キャプチャされ、永続化され、さらに後の時点で復元されることが可能である。このようにして、アプリケーション106がシャットダウンされることを要求することなしに、コンピュータ108上、およびオペレーティングシステム104上でメンテナンス工程を実行することができる。やはり図2に示されるとおり、いくつかの異なるソフトウェア構成要素を、ランタイム状態202をキャプチャし、永続化し、さらに復元するのに利用することができる。例えば、一実施形態において、アプリケーション仮想化層102は、ランタイム状態202をキャプチャするため、永続化するため、および復元するための本明細書で開示される工程を実行するように構成することができる。別の実施形態において、オペレーティングシステム104が、ランタイム状態202を生成し、さらに復元するように構成される。さらに別の実施形態において、アプリケーション204は、アプリケーション106に関するランタイム状態202を生成するように構成することができる。様々な実施形態において、カーネルドライバ、または他のタイプの低レベルのプログラムコードは、本明細書で説明される機能の様々な態様を可能にするようにアプリケーション204またはアプリケーション仮想化102によりオペレーティングシステム104にインストールできることを理解されたい。他のタイプの実施形態が、当業者には明白であり得る。以下でより詳細に説明されるとおり、仮想化されたアプリケーション106に関するランタイム状態202の生成を、IT管理者などからの要求に応答して実行することができる。そのような要求に応答して、アプリケーション106の実行が一時停止される。さらに、アプリケーション106により使用中のリソースが列挙され、リソースの現在の状態がキャプチャされ、さらに状態を定義するデータが、ランタイム状態202として永続化される。以下でより詳細に説明されるとおり、ランタイム状態202は、アプリケーション106の実行コンテキストを再作成するために後の時点でストレージから取り出すことができる。さらに、ランタイム状態202を、コンピュータ108以外のコンピュータに移して、再スタートすることができる。この機能に関するさらなる詳細は、以下で提供される。アプリケーション106をアプリケーション106の以前の状態に復元するために、格納されたランタイム状態202が、アプリケーション106の様々なプロセスを再作成し、さらにアプリケーション106により利用されるメモリの内容を復元するのに利用される。また、他のシステムリソース、ファイルリソース、およびUIリソースを再作成することもできる。さらに、一実施形態によれば、ランタイム状態202を作成した後に変更されたリソースに対するアプリケーション106からの要求を変換するのにプロキシ層が利用される。ランタイム状態202を復元すると、アプリケーション106の実行を再スタートすることができる。以上の工程に関するさらなる詳細は、図3乃至図8に関連して以下で提供される。図2は、単一のアプリケーション106に関するランタイム状態202の作成を例示するものの、本明細書で開示される実施形態は、複数のアプリケーション106に関するランタイム状態202を同時に作成するのに利用できることを理解されたい。例えば、複数のアプリケーションの実行コンテキストを同時にキャプチャするために本明細書で提示される概念を利用してランタイム状態202を生成することができる。格納されたランタイム状態202は、その後、その複数のアプリケーションの実行を同時に再開するのに利用することができる。やはり上述したとおり、本明細書で開示される実施形態は、主に、仮想化されたアプリケーション106に関するランタイム状態202を生成する脈絡で説明されるものの、本明細書で提示される実施形態は、他のタイプのアプリケーションで利用してもよいことを理解されたい。例えば、本明細書で開示される実施形態は、ハードウェア仮想化環境において実行される仮想化されていないアプリケーション、仮想化されていない環境において実行される仮想化されていないアプリケーション、および他のタイプのアプリケーションで利用してもよい。また、ランタイム状態202は、オペレーティングシステム104の実行状態とは独立に生成されることも理解されたい。このようにして、ランタイム状態202は、場合により、オペレーティングシステム104の異なるバージョンを実行している別のコンピュータに移行し、さらに元の状態に復元することが可能である。図3は、本明細書で開示される一実施形態において利用される格納されたランタイム状態202ランタイム状態202と本明細書で呼ぶ場合があるの内容を示すデータ構造図である。図3に示されるとおり、アプリケーションランタイム状態202は、メモリ内容302を含む。メモリ内容302は、アプリケーション106により使用される任意の仮想メモリ、共有されるメモリ、物理メモリ、または他のメモリの内容である。また、アプリケーションランタイム状態202は、レジスタコンテキスト304も含む。レジスタコンテキスト304は、アプリケーション106が実行されているコンピュータ108のCPUにおける任意のレジスタの内容である。また、レジスタコンテキスト304は、アプリケーション106の各スレッド、または各プロセスに関する命令ポインタ306を含むことも可能である。一実施形態において、アプリケーションランタイム状態202は、システムリソース状態308も含む。システムリソース状態308は、アプリケーション106の実行が一時停止された時点でアプリケーション106により使用中であるシステムリソースのセットの状態を定義するデータである。システムリソース状態308は、レジストリキーに対してアプリケーション106により開かれたハンドル、カーネルオブジェクトに対して開かれたハンドル、ローカルファイルシステム上、またはネットワーク共有上のファイル、アプリケーション106により使用中のTCPポート、および遠隔リソースに対してアプリケーション106により開かれた接続の状態を定義するデータを含むことが可能である。また、システムリソース状態308は、アプリケーション106が一時停止された時点でアプリケーション106により使用中の他のタイプのシステムリソースを定義するデータを含むことも可能である。一実施形態によれば、アプリケーションランタイム状態202は、UIリソース状態310も含む。UIリソース状態310は、アプリケーション106が一時停止された時点でアプリケーション106により使用中のUI要素を定義するデータを含む。例えば、UIリソース状態310は、UIウインドウのロケーション、複数のUI構成要素の間の関係、ウインドウハンドル、ならびに他のタイプのUIリソースの状態を定義するデータを定義することが可能である。一実施形態によれば、アプリケーション106により実行されるUI作成工程は、アプリケーション106の実行中にログ記録される。ログ記録されたUI作成工程を定義するデータは、アプリケーションランタイム状態202の中に格納され、さらにアプリケーション106が再スタートされる時点で、アプリケーションが一時停止された時点でアプリケーション106により提示されていたUIを再作成するのに利用することが可能である。また、他のタイプの機構を利用して、アプリケーション106が再スタートされる時点でアプリケーション106により提示されるUI要素を再作成するのに利用できるUIリソース状態310を生成することも可能であることを理解されたい。また、アプリケーションランタイム状態202は、ネットワーク接続状態312を含むことも可能である。ネットワーク接続状態312は、アプリケーション106が一時停止された時点でアプリケーション106により利用されていた任意のネットワーク接続の状態を定義するデータである。ネットワーク接続状態312は、例えば、ローカルネットワークリソースに対するハンドル、ネットワークポート、および他のネットワーク関連のデータを定義することが可能である。一実施形態において、アプリケーション106が一時停止された時点でアプリケーション106により使用中であったすべてのファイルリソースが、アプリケーション106が復元された際、ローカルファイルシステム上で同一の名前の下で利用可能である。しかし、他の実施形態において、アプリケーション106により使用中のファイルリソース314は、アプリケーションランタイム状態202に対する追加として束ねられる。また、ファイルリソース314は、様々なファイルリソース314に対するシークポインタの値を含むことも可能である。以下でより詳細に説明されるとおり、この束ねられたファイルリソース314は、アプリケーション106にファイルリソース314を提示するために、ランタイム状態202が再作成される時点で利用することも可能である。図3に示されるアプリケーションランタイム状態202の内容は、単に例示的であることを理解されたい。様々な実施形態によれば、他のデータが、アプリケーションランタイム状態202の中に含められることも可能である。しかし、一般に、アプリケーションランタイム状態202は、アプリケーション106が後の時点で再開できるように、アプリケーション106の実行コンテキストを再作成するのに必要なデータを含むことを理解されたい。アプリケーションランタイム状態202の作成および使用に関するさらなる詳細は、図4乃至図5に関連して以下で提供される。図4は、本明細書で提示される一実施形態による、アプリケーション106のランタイム状態202をキャプチャするため、および永続化するための本明細書で開示される1つの例示的なルーチン400の態様を示すフローチャートである。図4およびその他の図に関連して本明細書で説明される論理工程は、1コンピュータにより実施される工程のシーケンス、もしくはコンピューティングシステム上で実行される複数のプログラムモジュールとして、さらに/または2コンピューティングシステム内の互いに接続されたマシン論理回路もしくは回路モジュールとして実施されることを理解されたい。実施形態は、コンピューティングシステムの性能および他の要件に依存する選択の問題である。したがって、本明細書で説明される論理工程は、工程、構造デバイス、作用、またはモジュールという様々な呼ばれ方をする。これらの工程、構造デバイス、作用、およびモジュールは、ソフトウェアで、ファームウェアで、専用のデジタルロジックで、さらに以上の任意の組み合わせで実施することができる。また、図に示され、本明細書で説明されるよりも多い、または少ない工程を実行してもよいことも理解されたい。また、これらの工程は、本明細書で説明されるのとは異なる順序で実行することも可能である。ルーチン400は、工程402で始まり、アプリケーション106の実行が一時停止される。詳細には、アプリケーションプロセスにおけるすべてのスレッドの実行が一時停止される。アプリケーション106が一時停止されると、ルーチン400は、工程404に進み、メモリ内容302がキャプチャされる。上述したとおり、メモリ内容302は、アプリケーション106により使用中のすべての物理メモリ、仮想メモリ、および他のタイプのメモリの内容を含む。メモリ内容302は、アプリケーションランタイム状態202の中に格納される。工程404から、ルーチン400は、工程406に進み、レジスタコンテキスト304がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納される。上述したとおり、レジスタコンテキスト304は、アプリケーション106が実行されるコンピュータ108の1つまたは複数のCPUまたはCPUコアのレジスタの内容である。レジスタコンテキスト304がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納されると、ルーチン400は、工程408に進む。工程408で、命令ポインタ306がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納される。次に、ルーチン400は、工程410に進み、システムリソース状態308がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納される。上述したとおり、システムリソース状態308は、アプリケーション106により使用中のリソースを識別するデータを含む。例えば、システムリソース状態308は、レジストリキーに対してアプリケーション106により開かれたハンドル、カーネルオブジェクトに対して開かれたハンドル、ローカルファイルシステム上、またはネットワーク共有上のファイル、アプリケーション106により使用中のTCPポート、遠隔リソースに対してアプリケーション106により開かれた接続、および/または他のタイプのシステムリソースの状態を識別するデータを含み得る。工程410から、ルーチン400は、工程412に進み、UIリソース状態310がキャプチャされ、さらに格納される。上述したとおり、UIリソース状態310は、アプリケーション106により表示される任意のUI要素の状態を定義するデータである。UIリソース状態310は、ウインドウまたは他のUIオブジェクトに対するハンドル、アプリケーション106が再スタートされた時点でそれらのUIリソースを再作成するためのログデータ、および他のタイプの情報を含み得る。工程412から、ルーチン400は、工程414に進む。工程414で、ネットワーク接続状態312がキャプチャされ、さらにランタイム状態202の中に格納される。上述したとおり、ネットワーク接続状態312は、アプリケーションが一時停止された時点でアプリケーション106により開かれていた任意のネットワーク接続の状態を定義する。次に、ルーチン400は、工程416に進み、アプリケーション106により使用中のファイルリソース314もやはり識別され、ランタイム状態202の中に格納することができる。上述したとおり、一部の実施形態において、ファイルリソース314は、ランタイム状態202の中に含められない。しかし、他の実施形態において、任意のファイルリソース314、およびそれらのリソース314に関連するシークポインタが、ランタイム状態202の中に格納される。以下でより詳細に説明されるとおり、アプリケーション106の実行を再スタートするのに先立ちファイルリソース314を再作成することができる。メモリコンテンツ302、レジスタコンテキスト304、命令ポインタ306、システムリソース状態308、UIリソース状態310、ネットワーク接続状態312、および、場合により、ファイルリソース314がキャプチャされると、ルーチン400は、工程418に進む。工程418で、ランタイム状態202が、パッケージ化され、さらに永続化される。例えば、コンピュータ108がアクセスできる大容量ストレージデバイスにランタイム状態202を永続化することができる。代替として、コンピュータ108がアクセスできるネットワークロケーションにランタイム状態を永続化してもよい。工程418から、ルーチン400は、工程420に進み、ルーチン400は、終了する。図5は、本明細書で提示される一実施形態による、アプリケーション106のそれまでにキャプチャされ、さらに永続化されたランタイム状態202を復元するための本明細書で開示される1つの例示的なルーチン500の態様を示すフローチャートである。ルーチン500は、工程502で始まり、アプリケーション106のスレッドが再作成される。スレッドが再作成されると、ルーチン500は、工程504に進み、メモリの内容が、ランタイム状態202の中に格納されたメモリ内容302を利用して復元される。メモリの内容が復元されると、ルーチン500は、工程506に進み、CPUレジスタの内容が、ランタイム状態202の中に格納されたレジスタコンテキスト304を利用して復元される。また、命令ポインタも、工程508で復元される。工程508から、ルーチン500は、工程510に進み、システムリソースの状態が、システム復元状態308を利用して復元される。一部のシステムリソースは、ハンドルテーブルを介して間接的にアクセスすることができる。これらの事例において、それらのシステムリソースに対するすべてのハンドルが再び開かれ、さらにアプリケーション106とハンドルテーブルの間に間接指定の層が挿入されて、アプリケーションが再開された後のアプリケーションによる索引付きアクセスが、それらの開かれたハンドルの背後の実際のリソースにリダイレクトされるようになる。このプロセスに関するさらなる詳細は、図6に関連して以下で提供される。工程510から、ルーチン500は、工程512に進み、アプリケーション106の一時停止の時点でアプリケーション106により表示されていた任意のUI要素の状態が復元される。上記で簡単に説明したとおり、このことは、そのUIを復元するためにUI作成コマンドのログを再生することを含み得る。UI要素は、しばしば、ハンドルにより参照されるため、アプリケーション106とUIリソースの間の間接指定の層もまた、必要な場合がある。このプロセスに関する詳細は、図6を参照して以下で提供される。工程512から、ルーチン500は、工程514に進む。工程514で、アプリケーション106の一時停止の時点でアプリケーション106により開かれていた任意のネットワーク接続の状態が、ランタイム状態202の中に格納されたネットワーク接続状態312を利用して復元される。図6を参照して以下でより詳細に説明されるとおり、以前に開かれていたポート番号へのアクセスをアプリケーション106に提供するのに間接指定の層もまた、必要な場合がある。工程514でネットワーク接続状態が復元されると、ルーチン500は、工程516に進む。工程516で、ランタイム状態202の中に格納された任意のファイルリソース314が復元される。アプリケーション106により開かれていたファイルストリーム上のシークポインタもまた、アプリケーション106が、アプリケーション106が一時停止された時点に最新であったオフセットから読み取ることを再開することができるように、復元される。ランタイム状態202に格納されたファイルリソース314は、それらのファイルリソースに対するハンドルが開かれ、さらにアプリケーション106が再開されるのに先立ち、ファイルリソース314の名前付きのロケーションで復元することができる。工程516から、ルーチン500は、工程518に進み、アプリケーション106といくつかのタイプの復元されたリソースの間で間接指定の層を提供するようにプロキシ層が実行される。アプリケーション要求を変換するのにプロキシ層を使用することに関するさらなる詳細が、図6に関連して以下で提供される。プロキシ層がインスタンス化されると、ルーチン500は、工程520に進み、アプリケーション106の実行が、アプリケーション106が、アプリケーション106の一時停止の時点で実行されていたポイントで再スタートされる。工程520から、ルーチン500は、工程522に進み、ルーチン500は、終了する。図6は、本明細書で開示される一実施形態におけるアプリケーション要求604を変換するのに利用されるプロキシ層602の態様を示すコンピュータソフトウェアアーキテクチャ図である。上記で簡単に説明したとおり、ランタイム状態202が作成された後に、いくつかのシステムリソースが変更される可能性がある。その結果、アプリケーション106が再開された際、これらのリソースが、利用できない、名前を変更されている、番号を変更されている、またはそれ以外で異なるように識別される可能性がある。アプリケーション106の実行が再開された後に、これらのリソースへのアクセスをアプリケーション106に提供するために、プロキシ層602が設けられる。プロキシ層602は、アプリケーション106といくつかのタイプのリソースの間に間接指定のレベルを提供する。図6に示されるとおり、プロキシ層602は、システムリソース606、ネットワーク接続608、ファイルリソース610、およびUIリソース612などの、いくつかのタイプのリソースに関するアプリケーション要求604を受信する。プロキシ層602は、アプリケーション106が再開された際、アプリケーション要求604が、システムリソースにより使用されるロケーション、名前、および他のタイプの識別子に適合するように、アプリケーション要求604を変換する。例えば、或るファイルが、アプリケーション106が一時停止された時点で1つのロケーションに存在し得るが、アプリケーション106が再開された際、別のロケーションに位置していることが可能である。プロキシ層602は、そのファイルの元のロケーションにおけるそのファイルに関するアプリケーション要求604を、その新たなロケーションに変換する。別の例として、或るUIウインドウが、アプリケーション106が一時停止された時点で1つのハンドルにより識別されるが、アプリケーション106が再開された時点で別のハンドルにより識別されることが可能である。プロキシ層602は、そのウインドウに関するアプリケーション要求604をインターセプトし、さらにアプリケーション要求604が成功するようにそれらのハンドルを変換する。同様に、或るネットワークポートが、アプリケーション106が一時停止された時点でアプリケーション106により使用中であり得るが、アプリケーション106が再開された際、利用できない可能性がある。プロキシ層602は、元のポート番号を、アプリケーション106が実行を再開した際に利用可能である新たなポートに変換する。プロキシ層602は、システムリソース606、ネットワーク接続608、ファイルリソース610、およびUIリソース612を求める要求を変換するものとして図6に例示されてきたが、プロキシ層602は、他のタイプのリソースを求める要求を変換することも可能であることを理解されたい。また、変更されたリソースを求めるアプリケーション要求604が、アプリケーション106の実行が再開された後に成功し得ることを確実にするために、他のタイプの機構が利用されてもよいことも理解されたい。図7は、一実施形態におけるアプリケーション106のランタイム状態202を格納するため、および再開するための本明細書で開示される技術を利用する2つのコンピュータシステム間で、実行されるアプリケーション106を移行させるための例示的なルーチン700を示すフローチャートである。ルーチン700は、工程702で始まり、アプリケーションランタイム状態202が、図4に関連して上記で説明した様態でキャプチャされ、さらに永続化される。アプリケーションランタイム状態202が永続化されると、ルーチン700は、工程704に進む。工程704で、ランタイム状態202が、別のコンピュータに移される。このことは、様々な理由で望ましい可能性がある。例えば、コンピュータの間でアプリケーションランタイム状態202を移行させることは、アプリケーション106がシャットダウンされ、さらに移行先のコンピュータ上で再スタートされることを要求することなしに、コンピュータの処理負荷が負荷分散されることを許す可能性がある。また、アプリケーションランタイム状態202の移行は、他の理由で望ましい可能性もある。ランタイム状態202が、移行先のコンピュータに移行させられると、ルーチン700は、工程706に進み、アプリケーションランタイム状態202が、図5を参照して上述した様態で移行先のコンピュータにおいて復元される。工程706から、ルーチン700は、工程708に進み、ルーチン700は、終了する。図8は、一実施形態におけるアプリケーション106のランタイム状態202を格納するため、および再開するための本明細書で開示される技術を利用するコンピュータ108上でメンテナンス工程を実行するための例示的なルーチン800を示すフローチャートである。ルーチン800は、工程802で始まり、ランタイム状態202が、図4を参照して上述した様態でキャプチャされ、さらに永続化される。工程802から、ルーチン800は、工程804に進み、コンピュータ108上でシステムメンテナンスが実行される。例えば、オペレーティングシステム104上、またはコンピュータ108のハードウェア上でメンテナンスまたはアップグレードを実行することができる。メンテナンス工程が実行されると、ルーチン800は、工程806に進み、アプリケーションランタイム状態202が、図5に対して上述した様態で復元される。工程806から、ルーチン800は、工程808に進み、ルーチン800は、終了する。図7乃至図8に関連して上述した以外の理由で、実行されているアプリケーションの状態を一時停止し、さらに復元することが望ましい可能性もあることを理解されたい。図9は、本明細書で提示される様々な実施形態を実施することができるコンピューティングシステムに関する例示的なコンピュータハードウェアおよびソフトウェアのアーキテクチャを示すコンピュータアーキテクチャ図である。図9に示されるコンピュータアーキテクチャは、従来のデスクトップコンピュータ、ラップトップコンピュータ、またはサーバコンピュータを示し、さらに本明細書で説明される様々なソフトウェア構成要素を実行するのに利用することができる。図9に示されるコンピュータアーキテクチャは、中央処理装置902CPUと、ランダムアクセスメモリ914RAMおよび読み取り専用メモリROM916を含むシステムメモリ908と、このメモリをCPU902に結合するシステムバス904とを含む。起動中などに、コンピュータ900内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システムBIOSが、ROM916の中に格納される。コンピュータ900は、以下でより詳細に説明される、オペレーティングシステム918、アプリケーションプログラム、および他のプログラムモジュールを格納するための大容量ストレージデバイス910をさらに含む。大容量ストレージデバイス910は、バス904に接続された大容量ストレージコントローラ図示せずを介してCPU902に接続される。大容量ストレージデバイス910、およびデバイス910に関連するコンピュータ可読記録媒体は、コンピュータ900に不揮発性ストレージを提供する。本明細書に含まれるコンピュータ可読メディアの説明は、ハードディスクドライブまたはCD-ROMドライブなどの大容量ストレージデバイスについて述べるものの、コンピュータ可読記録媒体は、コンピュータ900によりアクセスされ得る任意の利用可能なコンピュータストレージメディアであり得ることを理解されたい。例として、限定としてではなく、コンピュータ可読記録媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するために任意の方法または技術で実施された揮発性メディアおよび不揮発性メディア、リムーバブルメディアと非リムーバブルメディアを含み得る。例えば、コンピュータ可読記憶媒体には、RAM、ROM、EPROM、EEPROM、フラッシュメモリもしくは他のソリッドステートメモリ技術、CD-ROM、デジタルバーサタイルディスクDVD、HD-DVD、ブルーレイ、もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望される情報を格納するのに使用されることが可能であるとともに、コンピュータ900によりアクセスされ得る他の任意の一時的でないメディアが含まれるが、以上には限定されない。また、本明細書で開示されるコンピュータ可読メディアは、通信メディアも包含することを理解されたい。通信メディアは、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構としてコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実現し、さらに任意の情報配信メディアを含む。変調されたデータ信号という用語は、信号内に情報を符号化するように特性の1つまたは複数が設定された、または変更された信号を意味する。例として、限定としてではなく、通信メディアには、有線ネットワークもしくは直接配線接続などの有線メディア、ならびに音響メディア、RFメディア、赤外線メディア、および他のワイヤレスメディアなどのワイヤレスメディアが含まれる。上述のメディアのうちの任意のメディアの組み合わせもまた、コンピュータ可読メディアの範囲に含められなければならない。コンピュータ可読記録媒体は、通信メディアを包含しない。様々な実施形態によれば、コンピュータ900は、ネットワーク920のようなネットワークを介して遠隔コンピュータに対する論理接続を使用するネットワーク化された環境において動作することが可能である。バス904に接続されたネットワークインターフェースユニット906を介してコンピュータ900をネットワーク920に接続することができる。ネットワークインターフェースユニット906は、他のタイプのネットワークおよび遠隔コンピュータシステムを接続するのに利用されることも可能であることを理解されたい。また、コンピュータ900は、キーボード、マウス、または電子スタイラス図9に示さずを含む、いくつかの他のデバイスからの入力を受信するため、および処理するための入出力コントローラ912を含むことも可能である。同様に、入出力コントローラは、ディスプレイスクリーン、プリンタ、または他のタイプの出力デバイスやはり、図9に示さずに出力を供給することも可能である。上記で簡単に述べたとおり、ネットワーク化されたデスクトップコンピュータ、ラップトップコンピュータ、またはサーバコンピュータの工程を制御するのに適したオペレーティングシステム918を含む、いくつかのプログラムモジュールおよびデータファイルを、コンピュータ900の大容量ストレージデバイス910およびRAM914の中に格納することができる。また、大容量ストレージデバイス910およびRAM914は、1つまたは複数のプログラムモジュールを格納することも可能である。詳細には、大容量ストレージデバイス910およびRAM914は、仮想化されたアプリケーション106、アプリケーション仮想化層102、および/または上述したその他のソフトウェア構成要素を格納することが可能である。また、大容量ストレージデバイス910およびRAM914は、他のプログラムモジュール、ならびにアプリケーション状態202などのデータを格納することも可能である。一般に、ソフトウェアアプリケーションまたはモジュールは、CPU902にロードされ、さらに実行されると、CPU902および全体的なコンピュータ900を汎用コンピューティングシステムから、本明細書で提示される機能を実行するようにカスタマイズされた専用のコンピューティングシステムに変換する。CPU902は、任意の数の状態を個々に、または集合的にとり得る、任意の数のトランジスタまたは他のディスクリートの回路要素から構築することができる。より具体的には、CPU902は、ソフトウェア内、またはモジュール内に含まれる実行可能命令に応答して、1つまたは複数の有限状態マシンとして動作することが可能である。これらのコンピュータ実行可能命令は、CPU902がどのように状態の間を遷移するかを指定することによりCPU902を変換して、その結果、CPU902を構成するトランジスタ、または他のディスクリートのハードウェア要素を物理的に変換することが可能である。また、ソフトウェアまたはモジュールを大容量ストレージデバイス上に符号化することは、その大容量ストレージデバイス、または関連するコンピュータ可読記録媒体の物理的構造を変換することも可能である。物理的構造の特定の変換は、この説明の様々な実施形態において、様々な要因に依存し得る。そのような要因の例には、コンピュータ可読記録媒体を実施するのに使用される技術、コンピュータ可読記録媒体が一次ストレージとして特徴付けれるか、または二次ストレージとして特徴付けれるかなどが含まれ得るが、以上には限定されない。例えば、コンピュータ可読記録媒体が半導体ベースのメモリとして実施される場合、ソフトウェアまたはモジュールは、この半導体メモリの物理的状態を、この半導体メモリにソフトウェアが符号化されると、変換することが可能である。例えば、ソフトウェアは、この半導体メモリを構成するトランジスタ、キャパシタ、または他のディスクリートの回路要素の状態を変換することが可能である。別の例として、コンピュータ可読ストレージメディアは、磁気技術または光学技術を使用して実施することができる。そのような実施形態において、ソフトウェアまたはモジュールは、磁気メディアまたは光メディアの物理的状態を、ソフトウェアが磁気メディアまたは光メディアに符号化されると、変換することが可能である。これらの変換は、所与の磁気メディア内の特定のロケーションの磁気特性を変えることを含むことも可能である。また、これらの変換は、所与の光メディア内の特定のロケーションの物理的特徴または物理的特性を変えて、それらのロケーションの光特性を変化させるようにすることを含むことも可能である。この説明の範囲および趣旨を逸脱することなく、物理メディアの他の変換も可能であり、上述の例は、この説明を容易にするように提供されているに過ぎない。以上に基づいて、アプリケーションランタイム状態を格納するため、および再開するための技術が本明細書で提示されてきたことが理解されよう。本明細書で提示される主題は、構造上の特徴、方法上の工程、およびコンピュータ可読メディアに特有の言い回しで説明されてきたものの、添付の特許請求の範囲において規定される本発明は、本明細書で説明される特定の特徴、工程、またはメディアに必ずしも限定されないことを理解されたい。むしろ、それらの特定の特徴、工程、およびメディアは、特許請求の範囲を実施する例示的な形態として開示される。上述した主題は、単に例として提供されており、限定するものと解釈されるべきではない。例示され、説明される例示的な実施形態および応用例に従わずに、添付の特許請求の範囲に記載される本発明の真の趣旨および範囲を逸脱することなしに、本明細書で説明される主題に様々な変形および変更を行うことができる。"