|
.NET TIPS
ClickOnceオンライン・キャッシュ領域をクリアするには?[2.0のみ、C#、VB]
デジタルアドバンテージ 一色 政彦
2006/06/09 |
|
|
.NET Framework 2.0では、アプリケーションを配布・更新するための“ClickOnce”という機能が追加された。そのClickOnceでは、次の2種類のアプリケーション実行方法が提供されている。
(1)ローカル環境へインストールするモード(オンライン/オフライン・モード)
(2)ネットワーク上から起動するモード(オンライン・モード)
このどちらの方法で実行するとしても、ClickOnceアプリケーションはクライアント・コンピュータ内に存在するClickOnce専用のキャッシュ領域(以降、ClickOnceキャッシュ領域。「ClickOnceアプリケーション・ストア」とも呼ばれる)に保存される。本稿では、このうち(2)のネットワーク上から起動するモードを選択した場合のClickOnceキャッシュ領域のことを、分かりやすさのため「ClickOnceオンライン・キャッシュ領域」(以降、オンライン・キャッシュ領域)*1と表現する。
(2)のモードで一度アプリケーションを起動すると、そのプログラム・ファイルはオンライン・キャッシュ領域に保存され、次回以降の起動では(基本的に)その領域に格納されたプログラム・ファイル(以降、オンライン・キャッシュ)が用いられる。
*1 ClickOnceキャッシュ領域は、従来のノータッチ・デプロイメントが利用する.NETアセンブリ・ダウンロード・キャッシュ領域とはまったく異なる場所である。(2)のモードで部分信頼アプリケーションとして実行する場合のオンライン・キャッシュ領域は、デフォルトで250Mbytesが割り当てられている(※(2)のモードの完全信頼アプリケーションや(1)のモードでは、この制限はない。なお完全信頼アプリケーションや部分信頼アプリケーションについては、「ClickOnceの真実―第2回 ClickOnceの仕組みを理解しよう」を参照してほしい)。この領域サイズの制限は、純粋なアプリケーション群(=.EXEファイルや.DLLファイルなど)のサイズに対するもので、データ・ファイル(例えば.MDFファイルなど)は含まれない。 |
しかし、主に開発時にテストを行うケースで、このオンライン・キャッシュ領域に格納されたオンライン・キャッシュをすべて削除したいことがある。本稿ではその方法を2つ紹介する。
※ただし本稿の方法では、「(1)のモードによりClickOnceキャッシュ領域にインストールしたキャッシュ」は削除されないので注意してほしい。削除されるのは、あくまで「(2)のモードによりオンライン・キャッシュ領域に配置したオンライン・キャッシュ」のみである。
|
Mage.exeによりクリアする方法
オンライン・キャッシュ領域をクリアするには、マニフェスト・ファイル*2を生成/編集するためのコンソール・ツール「Mage.exe」(Manifest Generation and Editing Tool)が利用できる。
Mage.exeは、.NET Framework 2.0 SDKに付属するツールだ。.NET Framework 2.0 SDKは、Visual Studio 2005(以降、VS 2005)をインストールすると「%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin」にデフォルトでインストールされる。
*2 ClickOnceで使われるマニフェスト・ファイルには、配置マニフェスト(.applicationファイル)とアプリケーション・マニフェスト(.manifestファイル)がある。これらのマニフェスト・ファイルは、VS 2005のIDEを使えば自動的に生成してくれる。通常、これらのファイルを手動で作成したい場合に、このMage.exeを使用する。マニフェスト・ファイルの詳細は「ClickOnceの真実 第2回 ClickOnceの仕組みを理解しよう」を参照されたい。 |
次のコマンド実行例のように、「-cc」というオプションを付けてMage.exeを呼び出せば、すべてのオンライン・キャッシュはクリアされる。
|
ClickOnceオンライン・キャッシュ領域をクリアするMage.exeコマンドの実行例 |
Mageは当然ながらMage.exeの「.exe」を省略したものだ。 |
プログラミングによりクリアする方法
先ほどの例では外部ツールを利用したが、例えばアプリケーション利用者の環境でオンライン・キャッシュ領域をクリアしたいケースでは、その環境に.NET Framework 2.0 SDKがインストールされている可能性が低いと考えられるので、Mage.exeを利用するのは難しいと考えた方がよいだろう。このような場合、プログラミングによって、オンライン・キャッシュ領域をクリアする処理をアプリケーションに実装することもできる。
これを実現するには、Dfshim.dll(=ClickOnce機能をサポートするライブラリ)に含まれるCleanOnlineAppCacheというWin32 APIを呼び出せばよい。なお、Dfshim.dllは.NET Framework 2.0のランタイムに付属する.DLLファイルで、「%windir%\system32」フォルダに配置される。
次のソース・コードは、CleanOnlineAppCache APIを実際に利用したコンソール・アプリケーションのサンプル・プログラムである。
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CleanOnlineAppCache();
Console.WriteLine("オンライン・キャッシュをクリアしました。");
}
[DllImport("Dfshim.dll")]
private extern static void CleanOnlineAppCache();
}
}
|
Imports system.Runtime.InteropServices
Class Program
Shared Sub Main()
CleanOnlineAppCache()
Console.WriteLine("オンライン・キャッシュをクリアしました。")
End Sub
<DllImport("Dfshim.dll")> _
Private Shared Sub CleanOnlineAppCache()
End Sub
End Class
|
|
CleanOnlineAppCache APIを利用するサンプル・プログラム(上:C#、下:VB) |
Dfshim.dllのCleanOnlineAppCache APIを呼び出すことで、オンライン・キャッシュをクリアできる。 |
Win32 APIの呼び出し方法については、「TIPS:Win32 APIやDLL関数を呼び出すには?」を参照してほしい。
カテゴリ:Windowsフォーム 処理対象:ClickOnce
使用ライブラリ:DllImport属性(System.Runtime.InteropServices名前空間)
関連TIPS:Win32 APIやDLL関数を呼び出すには? |
|
generated by
|
|
更新履歴 |
【2006/7/19】本記事の一部に以下のような誤りがありました。お詫びして訂正させていただきます。
誤 |
(2)のモードにおけるオンライン・キャッシュ領域は、デフォルトで250Mbytesが割り当てられている(※(1)のモードではこの制限はない)。 |
正 |
(2)のモードで部分信頼アプリケーションとして実行する場合のオンライン・キャッシュ領域は、デフォルトで250Mbytesが割り当てられている(※(2)のモードの完全信頼アプリケーションや(1)のモードでは、この制限はない。なお完全信頼アプリケーションや部分信頼アプリケーションについては、「ClickOnceの真実―第2回 ClickOnceの仕組みを理解しよう」を参照してほしい)。 |
|
|
Insider.NET 記事ランキング
本日
月間