「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
「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アプリケーション同様に、リッチ クライアント アプリケーションの配布の手間が軽減される。
- 開発側がアプリケーションに必要な「アクセス許可」を設定し、ユーザがこれを許可すれば、セキュリティ制限問題は発生しない。
この点「ノータッチ デプロイメント」の技術と比べて融通が利くようになった。
要件 †
配布・更新基盤として、色々な選択肢を検討する必要がある。
クライアント要件 †
ClickOnceアプリケーションを実行するには、次のクライアント要件を満たす必要がある。
環境 †
項番 | 種類 | 要件 |
1 | ランタイム | .NET Framework 2.0以上 |
2 | OS | .NET Framework 2.0以上が動作するOS |
3 | wwwブラウザ | Microsoft Internet Explorer(以下、IEと略す)5.01 以上 ※ ClickOnceローダ(dfsvc.exe)の起動にClickOnceをサポートするwwwブラウザが必要。 ※ FirefoxなどアドオンによりClickOnceをサポートするwwwブラウザもあるが、サポート情報を探し難く、今後のサポート打ち切りなどの可能性もある。 |
権限 †
「ClickOnce」では、インターネット環境から不特定多数に向けて配信されるWebアプリケーションのような利用を可能とするために、インストールの垣根を下げる必要があり、管理者権限が無くてもインストールが可能となっている 。
- このため、インストール先(正確にはキャッシュ領域 )は、”%USERPROFILE%\Local Settings\Apps”以下のディレクトリから変更することはできなくなっている(このためユーザ毎、別々にアプリケーションがストレージにキャッシュされることになる)。
- リソースやデータの保存先のストレージもこの環境変数「USERPROFILE」以下のディレクトリを使用するのが慣例となる(これは、セキュリティの関係上、他のユーザにデータを参照させないようにするためである。
- 「分離ストレージ」 を活用すれば、「ClickOnceアプリケーション」間のデータ保護も可能である)。
サーバ要件 †
サーバ要件(wwwサーバ、ファイル サーバなど)には、特別の要件は指定されていない。
動作の概要 †
発行~利用 †
「ClickOnce」の機能を利用するには、
- Visual Studioで作成したプログラムを「発行」(後述)して生成した「配布用フォルダ」をwwwサーバ上に配置し、
- 配置した「配布用フォルダ」内の『インストールWebページ』をIEで表示する。
- この『インストールWebページ』のリンク先には、「ClickOnceアプリケーション」を配置するためのリンクが含まれる。
- このリンクを押下してリンク先のレスポンスを受ける。
- ランタイムの『ClickOnceローダ(dfsvc.exe)』は、「ClickOnceアプリケーション」の配置情報を読み取り、
実行プログラムをローカル ディスクの『ClickOnceキャッシュ領域』にダウンロードする。
- プログラムを起動する。
- 『完全信頼』の場合は、単独で(通常のEXEと変わりなく)動作する。
- 『部分信頼』の場合は、『ClickOnceホスト(AppLaunch?.exe)』にホストされた状態で実行される。
詳細 †
仕組み、シーケンスの詳細は以下が参考になる。
連載 ClickOnceの真実:第2回 ClickOnceの仕組みを理解しよう
既定のアクセス許可 †
「セキュリティ ゾーン」に基づいた限定された「アクセス許可」が適用される。
項番 | 配置場所 | セキュリティ ゾーン |
1 | Webからの実行 | インターネット ゾーン |
2 | Webからのインストール | インターネット ゾーン |
3 | ネットワーク ファイル共有からのインストール | イントラネット ゾーン |
4 | CD-ROMからのインストール | 完全信頼 |
セキュリティの警告ダイアログ †
- 「ClickOnceアプリケーション」は、必要な、設定された「アクセス許可」をクライアントに要求する。
- 要求された「アクセス許可」が「セキュリティ ゾーン」の「アクセス許可」を上回っている場合は、「アクセス許可」の付与を求める [セキュリティ警告]画面がユーザに対して表示される。
配置オプション †
「配置オプション」には、
の2つのオプションがある。
どのオプションを選択しても配布の基本的な動作は同じ。
これを切り替えることで、配布の動作が大きく変化するわけではない。
『インストール モード』 †
「ClickOnceアプリケーション」を配布する際の、「ローカル ユーザ環境からのオフライン実行」が
- 「許されているか」
- オンライン モード
- オフライン実行が許されていない。
- インストール(キャッシュ領域に保存)されない。
- オンラインからの起動しかできない。
- 「許されていないか」
- オンライン/オフライン モード
- オフライン実行が許されている。
- インストール(キャッシュ領域に保存)される。
- オフラインでも実行可能。
を設定できる。
『配置場所』 †
「配布用フォルダ」を、次の3種類から選択することができる。
- インターネット/イントラネットなどのWeb上(HTTP URL)
- ネットワーク上でのファイル共有(UNCパス)
- CD-ROM/DVD-ROMなどのローカル デバイス上(ディレクトリ・パス)
「発行」後に「配布フォルダ」を移動する場合(例えば、開発機やビルド機のwwwサーバ上に「配布フォルダ」を作成し、その「配布フォルダ」を本番機のwwwサーバ上に配置する場合など)は、
プロジェクトのプロパティの[発行]タブにある、[発行場所]と[インストールのURL]の両方のテキスト ボックスにURLを入力することで対応できる。
これにより、[インストールのURL]テキスト ボックスにURLを入力すると、publish.htmのリンク先がこの入力値に差し替わる。
セキュリティ設定 †
「ClickOnceアプリケーション」は、
のどちらかのセキュリティ設定で動作する。
『完全信頼』 †
「セキュリティ制限」を受けずに、単独で(通常のEXEと変わりなく)動作する。
『部分信頼』 †
- .NET Frameworkが提供する『ClickOnce ホスト(AppLaunch?.exe)』にホストされた状態で動作する。
- これにより、アセンブリの出所に対応する「セキュリティ制限」(サンドボックスと呼ばれるセキュリティ・モデル)を受け動作する。
- かつて『部分信頼』には、コード・アクセス・セキュリティが使用されていた。
UAC †
管理者権限を持つClickOnceアプリケーションを実行することはできない。
ここにはハックがあり、管理者権限を持つ新しいプロセスを開始することはできる。
VSでの設定 †
セキュリティ・タブ †
セキュリティ・タブではアクセス許可を構成する。
- プロジェクトのプロパティの[セキュリティ]ページに、[ClickOnceセキュリティ設定を有効にする]チェック ボックスがある。
- 「ClickOnceアプリケーション」として発行する場合は、これをオンに設定する(「発行」すると自動的にオフ → オンに変更される)。
「アクセス許可」を与える場合、以下を設定する。
- 『完全信頼』
- 『部分信頼』
- コードグループと証拠のゾーン(アセンブリの発生元)を選択。
- 各、アクセス許可(パーミッション)を選択すると、設定した[アクセス許可]が『配置マニフェスト』に追加される。
- [アクセス許可の検出]ボタンを押せば、選択した「セキュリティ ゾーン」に対する現在のコードを解析し、追加が必要な「アクセス許可」の候補を表示する。
- [アクセス許可の検出]は静的な検出であり、実行時に動的にロードされるアセンブリが必要とする「アクセス許可」の検出はできない。
署名タブ †
署名タブでは「コード サイニング証明書」による『署名』を行う。
- デフォルトは何も設定されていないが、『発行ウィザード』を実行後、「コード サイニング証明書」が自動生成され、その「コード サイニング証明書」によって『署名』される。
- 開発時の「コード サイニング証明書」は自己署名なので、
- certmgr.exeコマンドライン ツールを使用して「信頼されたルート証明機関」・「信頼された発行元」ストアに「コード サイニング証明書」をインストールすることで、警告画面が表示されなくなる。
- 本番では、信頼されたルート証明機関に「コード サイニング証明書」を発行してもらい、利用する。
参考 †
発行タブ †
発行タブでは発行を行う。
『発行ウィザード』より詳細な設定が必要な場合、
プロジェクトのプロパティを開き、[発行]タブに移動する。
ここでは、以下の設定が可能である。
「配布用フォルダ」の「発行場所」
発行するバージョン番号 †
インストーラに含める必須コンポーネント †
必須コンポーネントのインストールにはインストール権限が必要。
ストレージ †
分離ストレージ †
「分離ストレージ」とは、主に『部分信頼』の「セキュリティ制限」を受ける(サンドボックス化される)アプリケーションからアクセス可能な唯一のストレージとして用意されており、また、種々のアプリケーションから利用できないよう分離される。
インストール先 †
- 正確にはキャッシュ領域は、”%USERPROFILE%\Local Settings\Apps”になる。
- プロジェクト出力に「埋め込まれたリソース」として追加されたapp.configや、
独自定義ファイル、または、業務データの保存先はココに格納される。
独自定義ファイルの配布方法 †
ClickOnceでは定義ファイルの配布・自動更新が問題となることがある。
以下、問題点の一例である。
- app.config の書き換え後は、「再発行」して自動更新を行う必要がある。
- app.config、user.configの設定変更については、ファイル直接の書き換えも可能であるが、
保存先のディレクトリ(「%USERPROFILE%\Local Settings\Apps」 、「%USERPROFILE%\Application Data」以下のディレクトリ)には
ランダムな乱数値が含まれるため、ユーザ(もしくは設定プログラム)による*.configファイル直接の書き換えが難しい。
- このため、設定変更に伴う*.configの「再発行」が必要になる場合がある。
- また、*.configの設定値は、「再発行」の後、ディレクトリが変更されるため初期値に戻される。
このような問題があるため、*.configファイルではなく、独自定義ファイルを使用した方が管理面で利便性が高くなる。この独自定義ファイルの配布方法と、そのメリット・デメリット、注意点を以下に纏める。
埋め込まれたリソース †
- メリット
- 配布・自動更新対象となる。
- 配置位置(フォルダ)への権限を意識しなくて良い。
- デメリット
テキストエディタを使用した編集が不可能(設定変更時は、再発行が必要になる)
- その他、注意点
読込用のAPIが特殊(Assembly.GetManifestResourceStream?を使用)
ファイルとして配布 †
- デメリット
- 配布・自動更新対象とならない(ユーザによる配布・更新)。
- 配置位置(フォルダ)への読込権限が必要 。
- 環境変数「ALLUSERSPROFILE」以下のディレクトリを使用可能。
- 複数ユーザ間で設定を共有するには、環境変数「ALLUSERSPROFILE」以下のディレクトリを使用可
- その他、注意点
XBAP以外でカレント ディレクトリを配置位置として使用した際、
更新時、カレント ディレクトリが変更され、設定の変更を保持できない。
プログラムにより初期設定を行う。 †
- 配布・自動更新対象となる(埋め込まれたリソースをテンプレートとして作りこみ)。
- 配置位置(フォルダ)への書込権限が必要 。
- 環境変数「USERSPROFILE」or「APPDATA」以下のディレクトリを使用する必要がある。
- 環境変数に対応した絶対パス指定が必要となる。
- デメリット
少々、作りこみが必要となる(初期設定、更新時のデータ引継)。
- その他、注意点
- 読込用のAPIが特殊(Assembly.GetManifestResourceStream?を使用)
- XBAP以外でカレント ディレクトリを配置位置として使用した際、
更新時、カレント ディレクトリが変更され、設定の変更を保持できない。
データ アクセス †
可能(Silverlightやストアアプリでは不可能だが)
プリンタ出力 †
可能
https://social.msdn.microsoft.com/Forums/ja-JP/73084ab7-3474-4a98-b3dc-029a05194786/clickonce?forum=vsgeneralja
ASP.NETでレポートを生成して、結果をClickOnceで直接印刷する仕組です。
プリンタ・ドライバのデプロイ †
- 必須コンポーネント(*.msi)に含めてインストールすることはできる。
- ただし、必須コンポーネントのインストールにはインストール権限が必要になる。
追加可能なカスタム動作 †
「ClickOnceアプリケーション」に追加することができるカスタム動作
バージョン番号の表示 †
「ClickOnceアプリケーション」のバージョン番号を表示する。
自動更新 †
更新されたバージョンがないかをサーバに問合せ、更新を行う。
オンデマンドでアセンブリをダウンロード †
.etc †
更新 †
ロールバック †
「ClickOnceアプリケーション」は、「1つ前のバージョンにロールバック(=昔のバージョンに戻す)」ことも可能。
コントロール パネルを開き、そこから[プログラムの追加と削除]を選択、
表示された[プログラムの追加と削除]ダイアログで[プログラムの変更と削除]の一覧の中から、
ロールバックしたい「ClickOnceアプリケーション」の[変更と削除]ボタンをクリックする。
すると「アンインストール」もしくは「ロールバック」するためのダイアログが表示される。
- [ClickOnceの保守]ダイアログが表示される
- [アプリケーションを以前の状態に復元します。]オプション ボタン
- [このコンピューターからアプリケーションを削除します。]オプション ボタン
ここで[アプリケーションを以前の状態に復元します。]を選択して[OK]ボタンをクリックすると、アプリケーションの「ロールバック」が開始される。ロールバックした後は、元のバージョンに戻せなくなる。
この場合、「ClickOnceアプリケーション」をアンインストールするか、また、サーバ側の「配布用フォルダ」を更新するまで、バージョン アップができないので注意が必要。
更新方法の選択 †
更新をスキップされないようにするには? †
更新するか?スキップするか?の選択は、オフライン実行を選択した時に選択できる。
一度スキップすると7日間ほど更新のダイアログが表示されなくなる(ClickOnceの仕様)。
サーバの更新後は最新のプログラムを使用する必要がある場合は以下のいずれかの対応をします。
- publish.htmから起動する。そうすれば自動更新される。
- オフライン実行を不可能にする。ショートカットからの起動が無ければ更新キャンセル不可能。
- ClickOnce Deployment APIを使用して、アプリケーション自身が更新を確認する作りにする。
- 更新の必須化
「アプリケーションに最低限必要なバージョン」を指定しておくことで、
それよりも古いバージョンのアプリケーションを実行不可とする (キャンセルできない)
ブラウザのサポート状況 †
IE以外のブラウザのサポート状況について。
Firefox †
- 2015/03/02:Firefoxに以下のPlugin追加し.NET4.5で動作確認した。
- 2016/01/25:「このアドオンは管理者によって無効化されています」と無効化されている。
- Microsoft .NET Framework Assistant 1.3.1
- 作者: Microsoft Corporation
- Adds ClickOnce support and the ability to report installed .NET versions to the web server.
This extension requires version 3.5 SP1 (or greater) of the .NET Framework to be installed and is the only official extension published by Microsoft to support ClickOnce.
Chrome †
Chromeには、Microsoft純正のPluginが無い模様。
(純正でないPluginは幾つか確認できるが何が良いのか解らない)
下記「ClickOnce for Chrome」を試たが動作しなかった。
Microsoft Edge †
ClickOnceやNo-Touch Deploymentが動作しない。
参考 †
参考 †
色々 †
調べれば色々できる。
Tags: :.NET開発