Skip to content

MS_ClickOnce

nishi_74322014 edited this page Aug 21, 2026 · 2 revisions

ClickOnce

概要

「ClickOnce」(クリック ワンス)は、.NET Framework 2.0 に搭載された
Windows アプリケーションの配布・自動更新基盤で、
.NET Framework 1.x で提供されていた「ノータッチ デプロイメント」の
後継技術である。

「ノータッチ デプロイメント」は、セキュリティ、配布(キャッシュの仕組み、
DLL、Config ファイルの配布)、パラメータ受け渡しなどで発生する問題点の
対策が複雑であったため「.NET Framework 2.0」から
「ClickOnce」という新しい技術が登場した。

ターゲット

「ClickOnce」は、

  • 「XCOPY」・「インストーラ」での配布や、自作の自動デプロイ・ツールから、
  • ⇒「ノータッチ デプロイメント」⇒「ClickOnce」という歴史を経て、

以下のようなアプリケーションを配布・自動更新することをターゲットにしている。

  • インターネット環境から不特定多数に向けて配信可能。
  • 自動更新をサポートするため、頻繁な仕様変更・更新がある場合に有益。
  • 中・小規模である(または画面側のみの配布)。
    • ダウンロード&キャッシュサイズの関係上、
      大規模なアプリケーションの展開は問題になりうる。
    • ただし配布・更新時のダウンロード時間が問題となる場合は、
      オンデマンド ダウンロードなどの造り込みにより性能改善することが可能である。

また、.NET Framework 3.0 からサポートされたWPFアプリケーションの
配布・自動更新も可能となっている。

メリット

  • Web アプリケーション同様に、
    リッチ クライアント アプリケーションの配布の手間が軽減される。
  • 開発側がアプリケーションに必要な「アクセス許可」を設定し、
    ユーザがこれを許可すれば、セキュリティ制限問題は発生しない。
    この点「ノータッチ デプロイメント」の技術と比べて融通が利くようになった。

要件

配布・更新基盤として、色々な選択肢
検討する必要がある。

クライアント要件

環境

項番 種類 要件
1 ランタイム .NET Framework 2.0 以上
2 OS .NET Framework 2.0 以上が動作する OS
3 wwwブラウザ Internet Explorer 5.01 以上
※ ClickOnce ローダ(dfsvc.exe)の起動に ClickOnce をサポートする wwwブラウザが必要。
※ Firefox などアドオンにより ClickOnce をサポートする wwwブラウザもあるが、サポート情報を探し難く、今後のサポート打ち切りなどの可能性もある。

補足(最新化:ブラウザ要件は解消した): 元ページが「今後のサポート
打ち切りの可能性」と懸念していたブラウザ依存は、その後解消された

時期 出来事
2015〜 Chrome / Edge が NPAPI / ActiveX を廃止し、ClickOnce が起動できなくなる
2018 Edge (Chromium) 拡張として ClickOnce サポートが提供される
現在 Edge / Chrome とも、拡張 or 設定で .application を起動できる

Edge では edge://flagsClickOnce Support を有効にするか、
グループ ポリシー ClickOnceEnabled で組織的に有効化できる。
加えて .NET Core 3.1 以降でも ClickOnce が復活しており
.NET Framework 専用ではなくなった)、
「もう使えない技術」ではなくなっている点は押さえておきたい。

権限

「ClickOnce」では、インターネット環境から不特定多数に向けて配信される
Web アプリケーションのような利用を可能とするために、
インストールの垣根を下げる必要があり、
管理者権限が無くてもインストールが可能となっている。

  • このため、インストール先(正確にはキャッシュ領域)は、
    %USERPROFILE%\Local Settings\Apps 以下のディレクトリから
    変更することはできなくなっている
    (このためユーザ毎、別々にアプリケーションがストレージにキャッシュされる)。

  • リソースやデータの保存先のストレージもこの環境変数
    USERPROFILE 以下のディレクトリを使用するのが慣例となる。

  • 「分離ストレージ」を活用すれば、
    「ClickOnce アプリケーション」間のデータ保護も可能である。

サーバ要件

サーバ要件(www サーバ、ファイル サーバなど)には、特別の要件は指定されていない。

動作の概要

ClickOnce動作の概要

発行~利用

「ClickOnce」の機能を利用するには、

  • Visual Studioで作成したプログラムを「発行」して生成した
    「配布用フォルダ」を www サーバ上に配置し、
  • 配置した「配布用フォルダ」内の『インストール Web ページ』を IE で表示する。
  • この『インストール Web ページ』のリンク先には、
    「ClickOnce アプリケーション」を配置するためのリンクが含まれる。
  • このリンクを押下してリンク先のレスポンスを受ける。
  • ランタイムの『ClickOnce ローダ(dfsvc.exe)』は、
    「ClickOnce アプリケーション」の配置情報を読み取り、
    実行プログラムをローカル ディスクの『ClickOnce キャッシュ領域』に
    ダウンロードする。
  • プログラムを起動する。
    • 『完全信頼』の場合は、単独で(通常の EXE と変わりなく)動作する。
    • 『部分信頼』の場合は、
      『ClickOnce ホスト(AppLaunch.exe)』にホストされた状態で実行される。

マニフェスト ファイル

ファイル 役割
配置マニフェスト(.application どのバージョンを配置するか。更新設定・アクセス許可
アプリケーション マニフェスト(.manifest 構成ファイルの一覧とハッシュ

既定のアクセス許可

「セキュリティ ゾーン」に基づいた限定された「アクセス許可」が適用される。

項番 配置場所 セキュリティ ゾーン
1 Web からの実行 インターネット ゾーン
2 Web からのインストール インターネット ゾーン
3 ネットワーク ファイル共有からのインストール イントラネット ゾーン
4 CD-ROM からのインストール 完全信頼

セキュリティの警告ダイアログ

  • 「ClickOnce アプリケーション」は、
    必要な、設定された「アクセス許可」をクライアントに要求する。
  • 要求された「アクセス許可」が「セキュリティ ゾーン」の「アクセス許可」を
    上回っている場合は、「アクセス許可」の付与を求める
    [セキュリティ警告]画面がユーザに対して表示される。

配置オプション

「配置オプション」には、『インストール モード』『配置場所』の 2 つがある。
どのオプションを選択しても配布の基本的な動作は同じ。

『インストール モード』

「ローカル ユーザ環境からのオフライン実行」が

モード オフライン実行 キャッシュ
オンライン モード 許されていない インストール(保存)されない。オンラインからの起動しかできない
オンライン/オフライン モード 許されている インストールされ、オフラインでも実行可能

『配置場所』

「配布用フォルダ」を、次の 3 種類から選択することができる。

  • インターネット/イントラネットなどの Web 上(HTTP URL)
  • ネットワーク上でのファイル共有(UNC パス)
  • CD-ROM/DVD-ROM などのローカル デバイス上(ディレクトリ・パス)

「発行」後に「配布フォルダ」を移動する場合は、
プロジェクトのプロパティの[発行]タブにある、
[発行場所]と[インストールの URL]の両方のテキスト ボックスに
URL を入力することで対応できる。

セキュリティ設定

「ClickOnce アプリケーション」は、『完全信頼』『部分信頼』の
どちらかのセキュリティ設定で動作する。

『完全信頼』

「セキュリティ制限」を受けずに、単独で(通常の EXE と変わりなく)動作する。

『部分信頼』

  • .NET Framework が提供する『ClickOnce ホスト(AppLaunch.exe)』に
    ホストされた状態で動作する。
  • これにより、アセンブリの出所に対応する「セキュリティ制限」
    (サンドボックスと呼ばれるセキュリティ・モデル)を受け動作する。
  • かつて『部分信頼』には、
    コード・アクセス・セキュリティが使用されていた。

補足(部分信頼は廃止された): 「かつて」と書かれているとおり、
コード アクセス セキュリティ (CAS) によるサンドボックスは
.NET Framework 4 で非推奨となり、以降のセキュリティ境界としては
サポートされない
(Microsoft は「CAS はセキュリティ境界ではない」と明言)。
.NET Core 以降には CAS 自体が存在しない。

現在の ClickOnce は実質「完全信頼」のみと考えてよい。
サンドボックスが必要なら、OS 側の仕組み
(AppContainer / UWP / MSIX)を使うことになる。

UAC

管理者権限を持つ ClickOnce アプリケーションを実行することはできない。

ClickOnce では、requireAdministrator または highestAvailable
実行レベルは使用できません。

ここにはハックがあり、管理者権限を持つ新しいプロセスを開始することはできる。

VSでの設定

セキュリティ・タブ

アクセス許可を構成する。

  • プロジェクトのプロパティの[セキュリティ]ページに、
    [ClickOnce セキュリティ設定を有効にする]チェック ボックスがある。
  • 『完全信頼』/『部分信頼』を選択し、
    部分信頼の場合はゾーンと各アクセス許可を選択する。
  • [アクセス許可の検出]は静的な検出であり、
    実行時に動的にロードされるアセンブリが必要とする「アクセス許可」は検出できない。

署名タブ

「コード サイニング証明書」による『署名』を行う。

  • 『発行ウィザード』を実行後、「コード サイニング証明書」が自動生成され、
    その証明書によって『署名』される。
  • 開発時の証明書は自己署名なので、
    • certmgr.exe で「信頼されたルート証明機関」・「信頼された発行元」ストアに
      インストールすることで、警告画面が表示されなくなる。
    • 本番では、信頼されたルート証明機関に
      コード サイニング証明書を発行してもらい、利用する。

発行タブ

  • 配置場所(「配布用フォルダ」の「発行場所」)
  • インストール モード
  • 発行するバージョン番号
  • インストーラに含める必須コンポーネント
    必須コンポーネントのインストールにはインストール権限が必要

ストレージ

分離ストレージ

「分離ストレージ」とは、主に『部分信頼』の「セキュリティ制限」を受ける
アプリケーションからアクセス可能な唯一のストレージとして用意されており、
また、種々のアプリケーションから利用できないよう分離される。

インストール先

  • 正確にはキャッシュ領域は、%USERPROFILE%\Local Settings\Apps になる。
  • プロジェクト出力に「埋め込まれたリソース」として追加された
    app.configや、独自定義ファイル、
    または、業務データの保存先はココに格納される。

独自定義ファイルの配布方法

ClickOnce では定義ファイルの配布・自動更新が問題となることがある。
以下、問題点の一例である。

  • app.config の書き換え後は、「再発行」して自動更新を行う必要がある。
  • app.configuser.config の設定変更については、
    ファイル直接の書き換えも可能であるが、保存先のディレクトリには
    ランダムな乱数値(ハッシュ)が含まれるため、
    ユーザ(もしくは設定プログラム)による *.config ファイル直接の
    書き換えが難しい。
    • このため、設定変更に伴う *.config の「再発行」が必要になる場合がある。
    • また、*.config の設定値は、「再発行」の後、
      ディレクトリが変更されるため初期値に戻される。

このような問題があるため、*.config ファイルではなく、
独自定義ファイルを使用した方が管理面で利便性が高くなる。

方式 メリット デメリット
埋め込まれたリソース 配布・自動更新対象になる。フォルダ権限を意識しなくてよい テキストエディタで編集不可(設定変更時は再発行が必要)。読込 API が特殊(Assembly.GetManifestResourceStream
ファイルとして配布 テキストエディタで編集可能 配布・自動更新対象にならない。配置位置への読込権限が必要
プログラムにより初期設定 配布・自動更新対象になり、かつ編集も可能 作り込みが必要(初期設定・更新時のデータ引継)

補足(現在の定石): 上表の 3 番目、
埋め込みリソースをテンプレートとして持ち、
初回起動時に %APPDATA% へ書き出す
」というのが今も最も筋がよい。
更新時のマージ(新しい設定項目の追加)まで作り込めば、
運用で困ることはほぼなくなる。

なお、%USERPROFILE%\Local Settings\Apps 配下(ClickOnce キャッシュ)に
業務データを置いてはならない。更新のたびにパスが変わり、消える

データ アクセス / プリンタ出力

  • データ アクセス:可能(Silverlight
    Windowsストアアプリでは不可能だが)
  • プリンタ出力:可能
  • プリンタ・ドライバのデプロイ:必須コンポーネント(*.msi)に含めて
    インストールできるが、インストール権限が必要になる。

追加可能なカスタム動作

System.Deployment.Application 名前空間により、次のような動作を追加できる。

  • バージョン番号の表示
  • 自動更新(更新されたバージョンがないかをサーバに問合せ、更新を行う)
  • オンデマンドでアセンブリをダウンロード

更新

ロールバック

「ClickOnce アプリケーション」は、
「1 つ前のバージョンにロールバック」することも可能。

  • [プログラムの追加と削除]→ 対象アプリの[変更と削除]
  • [ClickOnce の保守]ダイアログで
    [アプリケーションを以前の状態に復元します。]を選択

ロールバックした後は、元のバージョンに戻せなくなる。
この場合、アンインストールするか、サーバ側の「配布用フォルダ」を更新するまで、
バージョン アップができないので注意が必要。

更新をスキップされないようにするには?

一度スキップすると 7 日間ほど更新のダイアログが表示されなくなる
(ClickOnce の仕様)。
サーバの更新後は最新のプログラムを使用する必要がある場合は
以下のいずれかの対応をする。

  1. publish.htm から起動する。そうすれば自動更新される。
  2. オフライン実行を不可能にする。
    ショートカットからの起動が無ければ更新キャンセル不可能。
  3. ClickOnce Deployment API を使用して、
    アプリケーション自身が更新を確認する作りにする。
  4. 更新の必須化
    「アプリケーションに最低限必要なバージョン」を指定しておくことで、
    それよりも古いバージョンのアプリケーションを実行不可とする
    (キャンセルできない)。

補足(実務では 4 が最も確実): 「最低限必要なバージョン」
minimumRequiredVersion)は
ユーザがスキップできないため、
セキュリティ修正の強制適用に使える唯一の手段である。
業務システムでは既定でこれを設定しておくのが望ましい。

ブラウザのサポート状況

IE 以外のブラウザのサポート状況について(執筆当時の状況)。

ブラウザ 当時
Firefox Microsoft .NET Framework Assistant アドオン。2016年に無効化
Chrome Microsoft 純正の Plugin が無い
Microsoft Edge(旧) ClickOnce や No-Touch Deployment が動作しない

補足(現在の状況): 前掲のとおり、
Chromium 版 Edge / Chrome では ClickOnce を起動できるようになった。

ブラウザ 現在
Edge (Chromium) edge://flags の ClickOnce Support、またはポリシー ClickOnceEnabled で有効化
Chrome 拡張機能(Microsoft 提供の ClickOnce Helper 等)で対応
Firefox 非対応
IE 2022年6月にサポート終了

ただし、現在の Windows アプリ配布の主流は MSIX である。

ClickOnce MSIX
管理者権限 不要 不要
クリーンなアンインストール △(残骸が出ることがある) (コンテナ化)
Microsoft Store 配布 ×
差分更新 (ブロック単位)
.NET 以外のアプリ × (Win32 も可)

既存の ClickOnce 資産は維持で構わないが、
新規は MSIX を第一候補とするのが現在の判断である。

参考

microsoft.com


Tags: 移行, .NET開発, 配付技術, セキュリティ, Windows Forms, WPF

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally