.NET TIPS

ClickOnceオンライン・キャッシュ領域をクリアするには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2006/06/09


ClickOnceの真実 第3回 Visual Studio 2005でClickOnceを極めよう

 .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を呼び出せば、すべてのオンライン・キャッシュはクリアされる。

Mage -cc
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関数を呼び出すには?」を参照してほしい。End of Article

カテゴリ:Windowsフォーム 処理対象:ClickOnce
使用ライブラリ:DllImport属性(System.Runtime.InteropServices名前空間)
関連TIPS:Win32 APIやDLL関数を呼び出すには?

この記事と関連性の高い別の.NET TIPS
ClickOnceオンライン・キャッシュ領域のサイズを変更するには?
ClickOnceデータ・ディレクトリのパスを取得するには?
ClickOnceのログ・ファイルを特定の場所に作成するには?
ClickOnceアプリのディレクトリ・パスを取得するには?
ClickOnceアプリケーションをデバッグするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

更新履歴
【2006/7/19】本記事の一部に以下のような誤りがありました。お詫びして訂正させていただきます。

(2)のモードにおけるオンライン・キャッシュ領域は、デフォルトで250Mbytesが割り当てられている(※(1)のモードではこの制限はない)。
(2)のモードで部分信頼アプリケーションとして実行する場合のオンライン・キャッシュ領域は、デフォルトで250Mbytesが割り当てられている(※(2)のモードの完全信頼アプリケーションや(1)のモードでは、この制限はない。なお完全信頼アプリケーションや部分信頼アプリケーションについては、「ClickOnceの真実―第2回 ClickOnceの仕組みを理解しよう」を参照してほしい)。


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間