Open棟梁Project - マイクロソフト系技術情報 Wiki * 目次 [#j0ff67ab] #contents *概要 [#v81b6640] 「ClickOnce」(クリック ワンス)は、.NET Framework 2.0に搭載されたWindowsアプリケーションの配布・自動更新基盤で、.NET Framework 1.xで提供されていた「ノータッチ デプロイメント」の後継技術である。「ノータッチ デプロイメント」は、セキュリティ、配布(キャッシュの仕組み、DLL、Configファイルの配布)、パラメータ受け渡しなどで発生する問題点の対策が複雑であったため「.NET Framework 2.0」から「ClickOnce」という新しい技術が登場した。 **ターゲット [#gd1c8de0] 「ClickOnce」は、 -「XCOPY」・「インストーラ」での配布や、自作の自動デプロイ・ツールから、 -⇒「ノータッチ デプロイメント」⇒「ClickOnce」という歴史を経て、 以下のようなアプリケーションを配布・自動更新することにターゲットにしている。 -インターネット環境から不特定多数に向けて配信可能。 -自動更新をサポートするため、頻繁な仕様変更・更新がある場合に有益。 -中・小規模である(または画面側のみの配布)。 --ダウンロード&キャッシュサイズの関係上、大規模なアプリケーションの展開は問題になりうる。 --ただし配布・更新時のダウンロード時間が問題となる場合は、オンデマンド ダウンロードなどの造り込みにより性能改善することが可能である。 また、.NET Framework 3.0からサポートされた[[WPF]]アプリケーションの配布・自動更新も可能となっている。 **メリット [#d32bdb64] -Webアプリケーション同様に、リッチ クライアント アプリケーションの配布の手間が軽減される。 -開発側がアプリケーションに必要な「アクセス許可」を設定し、ユーザがこれを許可すれば、セキュリティ制限問題は発生しない。~ この点「ノータッチ デプロイメント」の技術と比べて融通が利くようになった。 *要件 [#hd3cb011] 配布・更新基盤として、[[色々な選択肢>プログラムの配付技術]]を検討する必要がある。 **クライアント要件 [#i1f051b7] ClickOnceアプリケーションを実行するには、次のクライアント要件を満たす必要がある。 ***環境 [#zab9e3d7] |項番|種類|要件|h |1|ランタイム|.NET Framework 2.0以上| |2|OS|.NET Framework 2.0以上が動作するOS| |3|wwwブラウザ|Microsoft Internet Explorer(以下、IEと略す)5.01 以上&br;※ ClickOnceローダ(dfsvc.exe)の起動にClickOnceをサポートするwwwブラウザが必要。&br;※ FirefoxなどアドオンによりClickOnceをサポートするwwwブラウザもあるが、サポート情報を探し難く、今後のサポート打ち切りなどの可能性もある。| ***権限 [#ca961be1] 「ClickOnce」では、インターネット環境から不特定多数に向けて配信されるWebアプリケーションのような利用を可能とするために、インストールの垣根を下げる必要があり、管理者権限が無くてもインストールが可能となっている 。 -このため、インストール先(正確にはキャッシュ領域 )は、”%USERPROFILE%\Local Settings\Apps”以下のディレクトリから変更することはできなくなっている(このためユーザ毎、別々にアプリケーションがストレージにキャッシュされることになる)。 -また、リソースやデータの保存先の[[ストレージ>#n07c7128]]もこの環境変数「USERPROFILE」以下のディレクトリを使用するのが慣例となる(これは、セキュリティの関係上、他のユーザにデータを参照させないようにするためである。また、「分離ストレージ」 を活用すれば、「ClickOnceアプリケーション」間のデータ保護も可能である)。 **サーバ要件 [#m23050e7] サーバ要件(wwwサーバ、ファイル サーバなど)には、特別の要件は指定されていない。 *動作の概要 [#y5b39760] **発行~利用 [#n1fb0936] 「ClickOnce」の機能を利用するには、Visual Studioで作成したプログラムを「発行」(後述)して生成した「配布用フォルダ」をwwwサーバ上に配置 し、「配布用フォルダ」内の『インストールWebページ』をIEで表示する。この『インストールWebページ』のリンク先には、「ClickOnceアプリケーション」を配置するためのリンクが含まれる。このリンク先のレスポンスを受けると、ランタイムの『ClickOnceローダ(dfsvc.exe)』は、「ClickOnceアプリケーション」の配置情報を読み取り、実行プログラムをローカル ディスクの『ClickOnceキャッシュ領域』にダウンロードする。 ***詳細 [#u8ffc70c] 仕組み、シーケンスの詳細は以下が参考になる。 連載 ClickOnceの真実:第2回 ClickOnceの仕組みを理解しよう -(1-2) - @IT~ http://www.atmarkit.co.jp/ait/articles/0603/11/news018.html --ClickOnceアプリが配布される仕組み ---ClickOnceアプリのフォルダ/ファイル構成 ---ClickOnceデプロイメントの流れ(ClickOnceローダー) -(2-2) - @IT http://www.atmarkit.co.jp/ait/articles/0603/11/news018_2.html --ClickOnceアプリが更新される仕組み ---ClickOnceアップデートの流れ(ClickOnceローダー) --ClickOnceで使われるマニフェスト・ファイル ---配置マニフェスト(.applicationファイル) ---アプリケーション・マニフェスト(.manifestファイル) ***既定のアクセス許可 [#yda8b3aa] 「セキュリティ ゾーン」に基づいた限定された「アクセス許可」が適用される。 |項番|配置場所|セキュリティ ゾーン|h |1|Webからの実行|インターネット ゾーン| |2|Webからのインストール|インターネット ゾーン| |3|ネットワーク ファイル共有からのインストール|イントラネット ゾーン| |4|CD-ROMからのインストール|完全信頼| ***セキュリティの警告ダイアログ [#i7ddaba8] -「ClickOnceアプリケーション」は、必要な、設定された「アクセス許可」をクライアントに要求する。 -要求された「アクセス許可」が「セキュリティ ゾーン」の「アクセス許可」を上回っている場合は、「アクセス許可」の付与を求める [セキュリティ警告]画面がユーザに対して表示される。 *配置オプション [#e4fcc75d] 「配置オプション」には、 -『[[インストール モード>#m40bf456]]』 -『[[配置場所>#r2eb39e5]]』 の2つのオプションがある。 どのオプションを選択しても配布の基本的な動作は同じ。~ これを切り替えることで、配布の動作が大きく変化するわけではない。 **『インストール モード』 [#m40bf456] 「ClickOnceアプリケーション」を配布する際の、「ローカル ユーザ環境からのオフライン実行」が -「許されているか」 --オンライン モード ---オフライン実行が許されていない。 ---インストール(キャッシュ領域に保存)されない。 ---オンラインからの起動しかできない。 -「許されていないか」 --オンライン/オフライン モード ---オフライン実行が許されている。 ---インストール(キャッシュ領域に保存)される。 ---オフラインでも実行可能。 を設定できる。 **『配置場所』 [#r2eb39e5] 「配布用フォルダ」を、次の3種類から選択することができる。 -インターネット/イントラネットなどのWeb上(HTTP URL) -ネットワーク上でのファイル共有(UNCパス) -CD-ROM/DVD-ROMなどのローカル デバイス上(ディレクトリ・パス) *セキュリティ設定 [#c87f66a4] 「ClickOnceアプリケーション」は、 -『[[完全信頼>#o09c8186]]』 -『[[部分信頼>#i23be72f]]』 のどちらかのセキュリティ設定で動作する。 **『完全信頼』 [#o09c8186] 「セキュリティ制限」を受けずに、単独で(通常のEXEと変わりなく)動作する。 **『部分信頼』 [#i23be72f] -.NET Frameworkが提供する『ClickOnce ホスト(AppLaunch.exe)』にホストされた状態で動作する。 -これにより、アセンブリの出所に対応する「セキュリティ制限」(サンドボックスと呼ばれるセキュリティ・モデル)を受け動作する。 -かつて『部分信頼』には、[[コード・アクセス・セキュリティ]]が使用されていた。 *VSでの設定 [#ce5b0791] **プロジェクトのタブ [#ga78ac49] ***セキュリティ・タブ [#q280aeef] セキュリティ・タブではアクセス許可を構成する。 -プロジェクトのプロパティの[セキュリティ]ページに、[ClickOnceセキュリティ設定を有効にする]チェック ボックスがある。 -「ClickOnceアプリケーション」として発行する場合は、これをオンに設定する(「発行」すると自動的にオフ → オンに変更される)。 「アクセス許可」を与える場合、以下を設定する。 -『[[完全信頼>#o09c8186]]』 -『[[部分信頼>#i23be72f]]』 --[[コードグループと証拠>コード・アクセス・セキュリティ#gdcd5987]]のゾーン(アセンブリの発生元)を選択。 --各、アクセス許可(パーミッション)を選択すると、設定した[アクセス許可]が『配置マニフェスト』に追加される。 ---[アクセス許可の検出]ボタンを押せば、選択した「セキュリティ ゾーン」に対する現在のコードを解析し、追加が必要な「アクセス許可」の候補を表示する。 ---[アクセス許可の検出]は静的な検出であり、実行時に動的にロードされるアセンブリが必要とする「アクセス許可」の検出はできない。 ***署名タブ [#m1b10b31] 署名タブでは「コード サイニング証明書」による『署名』を行う。 -デフォルトは何も設定されていないが、『発行ウィザード』を実行後、「コード サイニング証明書」が自動生成され、その「コード サイニング証明書」によって『署名』される。 -開発時の「コード サイニング証明書」は自己署名なので、 --certmgr.exeコマンドライン ツールを使用して「信頼されたルート証明機関」・「信頼された発行元」ストアに「コード サイニング証明書」をインストールすることで、警告画面が表示されなくなる。 --本番では、信頼されたルート証明機関に「コード サイニング証明書」を発行してもらい、利用する。 -参考 --「[[コード サイニング証明書>証明書#oa4d84a6]]」 --ClickOnce 信頼された発行者の設定~ https://msdn.microsoft.com/ja-jp/library/ms996418.aspx ***発行タブ [#h7fc5a66] 発行タブでは発行を行う。 『発行ウィザード』より詳細な設定が必要な場合、~ プロジェクトのプロパティを開き、[発行]タブに移動する。 ここでは、 -「配布用フォルダ」の「発行場所」 -『[[インストール モード>#m40bf456]]』 -発行するバージョン番号 -インストーラに含める必須コンポーネント などの設定が可能である。 「発行」後に「配布フォルダ」を移動する場合(例えば、開発機やビルド機のwwwサーバ上に「配布フォルダ」を作成し、その「配布フォルダ」を本番機のwwwサーバ上に配置する場合など)は、プロジェクトのプロパティの[発行]タブにある、[発行場所]と[インストールのURL]の両方のテキスト ボックスにURLを入力することで対応できる。[インストールのURL]テキスト ボックスにURLを入力すると、publish.htmのリンク先がこの入力値に差し替わる。 *ストレージ [#n07c7128] **インストール先 [#db964986] -正確にはキャッシュ領域は、”%USERPROFILE%\Local Settings\Apps”になる。 -プロジェクト出力に「埋め込まれたリソース」として追加されたapp.configや、独自定義ファイル、または、業務データの保存先はココに格納される。 **分離ストレージ [#jd510991] 「分離ストレージ」とは、主に『部分信頼』の「セキュリティ制限」を受ける(サンドボックス化される)アプリケーションからアクセス可能な唯一のストレージとして用意されており、また、種々のアプリケーションから利用できないよう分離される。 -分離ストレージを活用するには?[C#、VB] - @IT~ http://www.atmarkit.co.jp/fdotnet/dotnettips/578isolatedstorage/isolatedstorage.html -分離ストレージでディレクトリを使うには?[C#、VB] - @IT~ http://www.atmarkit.co.jp/fdotnet/dotnettips/584isolatedstoragedir/isolatedstoragedir.html *System.Deployment.Applicationクラスライブラリ [#t6ce0f3a] **追加可能なカスタム動作 [#n7b2bd36] 「ClickOnceアプリケーション」に追加することができるカスタム動作 ***バージョン番号の表示 [#oec2186b] 「ClickOnceアプリケーション」のバージョン番号を表示する。 ***自動更新 [#x26414e4] 更新されたバージョンがないかをサーバに問合せ、更新を行う。 *** [#x7e34c4e] *ロールバック [#dcee78d5] 「ClickOnceアプリケーション」は、「1つ前のバージョンにロールバック(=昔のバージョンに戻す)」ことも可能。 コントロール パネルを開き、そこから[プログラムの追加と削除]を選択、表示された[プログラムの追加と削除]ダイアログで[プログラムの変更と削除]の一覧の中から、ロールバックしたい「ClickOnceアプリケーション」の[変更と削除]ボタンをクリックする。すると「アンインストール」もしくは「ロールバック」するためのダイアログが表示される。 -[アプリケーションを以前の状態に復元します。] -[このコンピューターからアプリケーションを削除します。] ここで[アプリケーションを以前の状態に復元します。]を選択して[OK]ボタンをクリックすると、アプリケーションの「ロールバック」が開始される。 ロールバックした後は、元のバージョンに戻せなくなる。この場合、「ClickOnceアプリケーション」をアンインストールするか、また、サーバ側の「配布用フォルダ」を更新するまで、バージョン アップができないので注意が必要。 *サポート [#db0faaa0] IE以外のブラウザのサポート状況について。 **Firefox [#ibd3c2ce] 2015/03/02:Firefoxに以下のPlugin追加し.NET4.5で動作確認した。 -Microsoft .NET Framework Assistant Add-ons for Firefox~ https://addons.mozilla.org/ja/firefox/addon/microsoft-net-framework-assist/ --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 [#b913c608] Chromeには、Microsoft純正のPluginが無い模様。~ (純正でないPluginは幾つか確認できるが何が良いのか解らない)~ 下記「ClickOnce for Chrome」を試たが動作しなかった。 -ClickOnce for Chrome~ http://www.clickoncechrome.com/ **参考 [#eb356165] -ClickOnce - Wikipedia, the free encyclopedia~ http://en.wikipedia.org/wiki/ClickOnce#Browser_support -Browser support for ClickOnce deployement~ https://social.msdn.microsoft.com/forums/windows/en-us/49bb0073-adcf-4cbc-9529-a4cc8b57ce63/browser-support-for-clickonce-deployement -.net - ClickOnce for Chrome now that NPAPI is not supported - Stack Overflow~ http://stackoverflow.com/questions/26123714/clickonce-for-chrome-now-that-npapi-is-not-supported -Google、いよいよ新年からChrome向けNPAPIプラグインを全面ブロックへ - TechCrunch~ http://jp.techcrunch.com/2014/11/25/20141124chrome-will-start-blocking-all-remaining-npapi-plugins-in-january/ *更新方法の選択 [#c7506804] **更新をスキップされないようにするには? [#ia2979f5] 更新するか?スキップするか?の選択は、オフライン実行を選択した時に選択できる。~ 一度スキップすると7日間ほど更新のダイアログが表示されなくなる(ClickOnceの仕様)。 サーバの更新後は最新のプログラムを使用する必要がある場合は以下のいずれかの対応をします。 +publish.htmから起動する。そうすれば自動更新される。 +オフライン実行を不可能にする。ショートカットからの起動が無ければ更新キャンセル不可能。 +ClickOnce Deployment APIを使用して、アプリケーション自身が更新を確認する作りにする。 +更新の必須化 >「アプリケーションに最低限必要なバージョン」を指定しておくことで、~ それよりも古いバージョンのアプリケーションを実行不可とする (キャンセルできない) **参考 [#c06e2b80] -ClickOnce の更新方法の選択~ https://msdn.microsoft.com/ja-jp/library/s22azw1e.aspx *参考 [#e56d59d4] -Insider.NET ClickOnceの真実 - @IT~ http://www.atmarkit.co.jp/ait/subtop/features/dotnet/clickonce_index.html -ClickOnce について 松崎 剛 Blog~ https://blogs.msdn.microsoft.com/tsmatsuz/2006/08/15/clickonce/ -ClickOnce と Windows インストーラの使い分け~ http://msdn.microsoft.com/ja-jp/library/ms973805.aspx **色々 [#md77b51b] 調べれば色々できる。 -ClickOnce の配置を管理する~ https://msdn.microsoft.com/ja-jp/library/aa480721.aspx --はじめに --ClickOnce アプリケーションを発行して配置する --ClickOnce アプリケーションをインストールして起動する --ClickOnce アプリケーションを追跡する --Windows 認証を使用する --カスタム アプリケーション認証を使用する --クエリ文字列パラメータを使用する --カスタム クライアント プロキシを使用してアプリケーション セッションを確立する --ユーザー認証のまとめ --ClickOnce アプリケーションへのアクセスを制限する --Windows 認証を使用する --カスタム認証 --クエリ文字列パラメータを使用する --カスタム クライアント プロキシを使用する --ユーザー承認のまとめ --起動エラーに対処する --まとめ --その他のリソース --付録 --発行ディレクトリ構造 --配置プロバイダを設定および変更する -ClickOnce のセキュリティと配置~ https://msdn.microsoft.com/ja-jp/library/t71a733d.aspx --ClickOnce 配置ストラテジの選択 --ClickOnce キャッシュの概要 --ClickOnce とアプリケーション設定 --Windows Vista の ClickOnce 配置 --ClickOnce アプリケーションのローカライズ --ClickOnce アプリケーションのセキュリティ --ClickOnce アプリケーションの発行 --ClickOnce の更新方法の選択 --ClickOnce 配置のトラブルシューティング --ClickOnce に関するリファレンス --ClickOnce 配置のサンプルとチュートリアル