// この投稿は Windows & Microsoft技術 基礎 Advent Calendar 2015 の 12 日目の記事です。
ClickOnce とは、Windows 上のデスクトップ アプリケーションをネットワーク経由でインストールするための配置テクノロジです。
(ファイル システムからオフラインでインストールすることもできます。USB や DVD 経由なども含みます。)
正確には、ネットワークの有無を吸収して統一的にインストールするための仕組みと言ったほうがよいでしょう。
配置できるアプリケーションには WPF のほか、Windows フォームやコンソール アプリケーションなども含まれます。
ユーザーからすれば、インストーラーをいったんダウンロードする手間が省けます。
また、アプリケーションをアップデートするための仕組みも備わっています。
では、新規で WPF アプリケーション プロジェクトを作成しましょう。
これを最も簡単に ClickOnce で発行するには、[ソリューション構成] を Release に変更して、
プロジェクトのプロパティを開いて [公開] タブの [今すぐ発行] をクリックします。
これでアプリケーションが publish フォルダーに発行されました。
.application ファイルがエントリ ポイントとなっているので、
これをダブルクリックすればアプリケーションをインストールできます。
インストールが完了すれば、スタート メニューからアプリを起動できるようになります。
上記ではローカルのファイル システムからインストールしましたが、
ネットワーク経由にする場合も同じフォルダー構成で Web サーバーやファイル サーバーに配置しておき、
ブラウザーやエクスプローラーで .application の URL にアクセスすれば同じようにインストールできます。
証明書による署名
さて、上記の手順ですぐに発行すると、証明書に関する手順が省略されます。
実はこのプロセスの中で自動的に、有効期間が 1 年でパスワードの設定されていない自己署名の PFX ファイルが作成され、
さらにそれが証明書ストアの [個人] にインストールされています。
この PFX ファイルを [信頼されたルート証明機関] にもインストールしておくと、発行元が表示されるようになります。
(実際にクライアント PC に証明書をインストールするときは CER ファイルを使うほうがよいでしょう。)
さらに、これを [信頼された発行元] にもインストールすると、このダイアログが現れずにアプリケーションがインストールされます。
なお、PFX ファイルを含めたソース一式を他のコンピューター上でビルドすると、
PFX にパスワードが設定されていなければ、自動的に証明書ストアにインストールされます。
パスワードが設定されている場合は、[署名] タブなどからあらかじめインストールしておかないとビルドに失敗します。
コマンドからの発行
次のように、MSBuild.exe で発行することもできます。
msbuild WpfApplication1.csproj /p:Configuration=Release /t:Publish
.NET ビルド小技集 (4) で書いた方法と組み合わせれば、バージョン番号のインクリメントも含めて自動化できそうです。
なお、発行のバージョンとアセンブリのバージョンには関連がありません。
オプション
(1) アップデートについて
アプリケーションのアップデートを有効にするには、[公開] タブの [更新] をクリックして、各項目を設定します。
また、[公開] タブにある [インストール フォルダーの URL] も設定します。
なお、更新を有効にしなくても、手動での更新はできます (.application にアクセスするだけ)。
また、[プログラムと機能] から、1 世代前までロールバックができます。
(2) 表示名について
[公開] タブの [オプション] をクリックして、各項目を設定します。
- 発行者名 インストール時のルート フォルダーの名前となります。
- スイート名 ルート フォルダーとアプリケーションの間のフォルダーの名前となります。省略可能です。
- 製品名 アプリケーションの名前となります。
Windows 8 以降、スイート名のフォルダーは表示されなくなりました。
Git の設定
発行されたファイルを Git 経由で共有する場合 (GitHub Pages でホストするときなど) は注意が必要です。
Git は既定で、コミット時にテキスト ファイルの改行コードを LF に変換します。
しかし、ClickOnce はインストール時にダウンロードしたすべてのファイルのハッシュを検証するため、
ファイルが変更されてしまうとインストール時にエラーが発生します。
この場合、.manifest や .application などの XML ベースのファイルが該当します。
そこで、以下のように設定を変更します。
(1) config
config で core.autoCRLF を false に設定します。
$ git config --global core.autocrlf false
次のコマンドで設定を確認できます。
$ git config --list
(2) .gitattributes
config よりも、各リポジトリの .gitattributes が優先されます (Visual Studio などにより生成されます)。
.gitattributes ファイル内で text=auto となっている部分を次のように編集します。
text=false
さて、今回は自動生成された証明書を使いましたが、次回は既存の証明書を使って ClickOnce で発行する方法についてです。
前回: 証明書を作成する
次回: 既存の証明書を使って ClickOnce で発行する
バージョン情報
.NET Framework 4.5
Visual Studio 2013, 2015
参照
ClickOnce のセキュリティと配置
連載 ClickOnceの真実:第7回 ClickOnceが持つセキュリティ機構とは?
Windowsでgitを使う場合の改行コード自動変換がうざい
git での改行コード
Gitのcore.autocrlfについて
WindowsのGitクライアントSourceTreeのインストールと初期設定