こんにちは、くろがきです。
最近、Parallels Desktopを使ってWPFアプリケーションを作成しているのですが、いざアプリをWindowsパソコンで使ってみようとなった時に、配布方法に困りました。
通常のアプリケーションとして、exeファイルをクリックすると起動するようにしたいのですが、どうすれば良いのか。
ネットには色々と方法が書いてあったので試してみたのですが、一筋縄ではいきませんでした。
ですが、最終的にはWPFアプリをパッケージ化して配布できる状態にできたので、この記事ではその方法についてまとめておきたいと思ます。
1.Visual Studioで拡張機能をインストール
まずWPFアプリのパッケージ化のために、Visual Studioの拡張機能をインストールしておきます。
「拡張機能」→「拡張機能の管理」から「Microsoft Visual Studio Installer Projects (arm64)」をインストールします。
私はParallels Desktop上でARM版Windowsを使用しているので、インストーラープロジェクトの末尾に「arm64」とありますが、通常のWindowsを使用している方は無印版で大丈夫です。
インストール後は、Visual Studioを再起動しましょう。
2.ClickOnce発行し、インストーラーを作成する
配布したいプロジェクト名を右クリックして、「発行」を選びます。
「発行プロファイルの追加」を選びます。
「ClickOnce」を選択し、「次へ」をクリック。
発行場所は、そのまま「次へ」でOK。
インストール場所では、私はUSBでアプリを配布したかったので、一番下を選択しました。
設定は、そのまま「次へ」でOK。
マニュフェストの署名では念のため、署名しておきます。「ClickOnce マニフェストに署名する」にチェックし、「テスト証明書の作成」をクリックします。
適当なパスワードを入力すれば、テスト証明書を作成できます。
構成で、配置モードを「自己完結」、ターゲットランタイムを「win-x64」を選択し、ファイルの公開オプションで「単一ファイルの作成」にチェックを入れます。
最後に「完了」を押すと、プロファイルの作成が完了します。
作成されたプロファイルで「発行」をクリックすると、インストーラーが作成されます。
3.作成したアプリを配布する
プロジェクトファイルがあるフォルダを見にいくと、bin内に「publishフォルダ」が作成されています。
この中にはsetup.exeがあり、これをダブルクリックすることで、作成したアプリをインストールすることができます。
アプリを配布する場合は、このpublishフォルダをzip化するなどして、フォルダごと受け渡すことで配布ができます。
配布先でsetup.exeを起動するとアプリがインストールされ、スタートメニューに追加されます。
WPFアプリ配布の際の注意点
今回、初めてインストーラー作成して、WPFアプリを配布できる状態にしてみたのですが、その際直面したトラブルについてまとめておきます。
1.ClickOnce以外の方法では、うまく配布できないことがある
ClickOnce以外にも「フォルダ」を選択することもできますが、こちらはうまくいきませんでした。
インストーラーを起動してアプリをインストールしたあと、下記のエラーメッセージが出て、アプリを起動できませんでした。
「コンピュータの種類が現在のコンピューター以外のファイルです。」
私の場合は、上記の方法でうまくいったので、うまくアプリを配布できずに悩んでいる方は、まず上の方法を試してみてください。
2.ウィルス対策ソフトの誤検知
ClickOnceでインストーラーを発行し、うまくアプリを配布できても、ウィルス対策ソフトに引っかかることがあります。
私はたまたまウィルス対策ソフトAvastを入れたWindows機でアプリを試した際に、Avastから下記のようなメッセージが出ました。
「IDP.generic」を検知しました。
調べてみると、問題ないファイルであってもAvastが誤検知してしまうことがあるようです。
ちなみにWindows Defenderでスキャンした際は、特に問題は生じませんでした。
Windows 10以上ではWindows Defenderが有能なので、ウィルス対策ソフトはアンインストールでいいかもしれませんね。
3.アプリの名称がプロジェクト名になる
トラブルと言うほどではありませんが、上記の方法でインストーラー作成を行うと、インストール後にWindowsに登録されるアプリ名がプロジェクト名になります。
そのため、プロジェクト作成段階である程度しっかりした名前をつけておかないと、後で「これ、なんのアプリだっけ?」となってしまいます。
少し調べていると、おそらくインストーラー作成時に、アプリ名の変更もできそうな気がするので、またチャレンジしてみます。
まとめ
今回の記事では、WPFアプリをパッケージ化し、配布できる状態にする方法についてまとめました。
前からやりたかった、アプリの作成と配布をする方法がわかってきたので、良い経験になりました。
アプリを配布するという観点では、最初からUWPで作成しておいたほうがラクかもな、と思いました。
MVVM設計でアプリを作成するのは、小規模なアプリでは非効率に感じますが、慣れ次第なところもあると思うので、もう少し戯れたいと思います。