MS_ClickOnce - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

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://flags の ClickOnce 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.config、user.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

⚠ **GitHub.com Fallback** ⚠