.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の仕組みを理解しよう 」を参照してほしい)。
TechTargetジャパン
キャリアアップ