Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
63
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@Kosen-amai

Windows GUIプログラミング入門15 インストーラー(1)

■はじめに

今回はプログラムをインストーラーで配布できるようにします。

キーワード:VisualStudio2017, InstallerProjects, UAC

[注意]
これまでの回で説明済みの操作方法等は、説明を省略したり簡略化している場合があります。

■開発環境

  • Windows 10 (バージョン1703)
  • Visual Studio Community 2017
  • .NET Framework 4.x

■拡張機能のインストール

以下のサイトからInstaller Projectsの拡張をダウンロードします。

Microsoft Visual Studio 2017 Installer Projects

wbg15-01.png

インストールします。
wbg15-02.png

■インストーラープロジェクトの追加

適当に何かプロジェクトを作り、ソリューションの「追加」 - 「新しいプロジェクト」を選択します。
wbg15-03.png

「新しいプロジェクトの追加」画面で「その他のプロジェクトの種類」 - 「Visual Studio Installer」を選択し、「Setup Wizard」を選択します。
wbg15-04.png

「次へ」を選択します。
wbg15-05.png

「次へ」を選択します。
wbg15-06.png

「プライマリ出力」を選択し、「次へ」を選択します。
wbg15-07.png

「次へ」を選択します。
wbg15-08.png

「完了」を選択します。
wbg15-09.png

インストーラープロジェクトが追加されました。
wbg15-10.png

■インストーラープロジェクトの設定

◇ビルド設定

ソリューションを右クリック、「構成マネージャー」を選択し、インストーラープロジェクトの「ビルド」にチェックを入れます。
wbg15-11.png

ソリューションエクスプローラーのDetected DependenciesからMicrosoft .NET Framework以外(使わないもの)を右クリックして「除外」します。
wbg15-12.png

wbg15-12b.png

インストーラープロジェクトのプロパティ、PostBuildEventの「...」を選択します。
wbg15-12c.png

wbg15-12d.png

「マクロ」ボタンを選択してBuildOutputPathをダブルクリックします。
wbg15-12e.png

以下のように書き換えます。
"C:\Program Files (x86)\Windows Kits\10\bin\x86\MsiInfo.exe" "$(BuiltOuputPath)" /W 10
wbg15-12f.png

MsiInfoのパスは環境に応じて書き換えてください。
パスは、Developer Command Prompt for VS 2017(開発者コマンドプロンプト)を起動し、
wbg15-12g.png

where msiinfo確認しましょう。

※Windows 10でmsiinfoが見つからない場合、Visual Studio Installer個別のコンポーネントからWindows 10 SDKを入れてください。

PostBuildEventはビルド後に実行される処理で、
MSIファイルを管理者権限不要でインストールできるように設定変更するコマンドを書いています。

Program Files配下にインストールする等、管理者権限が必要なセットアップにしてしまった場合はMSIファイルの設定を変えても管理者権限は要求されます。

◇プロパティ設定

File SystemタブのApplication Folderを選択し、プロパティのDefaultLocation
[LocalAppDataFolder][Manufacturer]\[ProductName]に設定します。
wbg15-13.png

ソリューションエクスプローラーでインストーラープロジェクトを選択し、プロパティを設定します。
wbg15-14.png

プロパティ 設定値 備考
Auther 作成者A
Description 説明BBB
DetectNewerInstalledVersion True インストール時の新バージョンチェック
InstallAllUsers False すべてのユーザーにインストールするか
Localization Japanese
Manufacturer 会社C
ProductName ソフトD
RemovePreviousVersions True 古いバージョンの削除
Subject タイトルE
Title タイトルFF
Version 1.0.0

◇デスクトップのショートカット

File SystemタブのUser's Desktopを選択し、プロパティのAlwaysCreateTrueに設定します。
wbg15-15.png

User's Desktopを選択し、ツリー右の部分(Name, Type列のある領域)で右クリックし、「新しいショートカットの作成」を選択します。
wbg15-16.png

Application Folderをダブルクリックします。
wbg15-17.png

「プライマリ出力」が選択されているので「OK」を選択します。
wbg15-18.png

ショートカットの名前をソフトDに変更します。
wbg15-19.png

wbg15-20.png

◇スタートメニューのショートカット

User's Programs Menuを右クリックし、「Add」 - 「Folder」を選択します。
wbg15-21.png

フォルダ名をグループGに変更し、AlwaysCreateTrueにし、グループGの右の領域で右クリック、「新しいショートカットの作成」を選択します。
wbg15-22.png

User's Desktopの時と同じように設定します。
wbg15-23.png

■ビルド

ソリューションをReleaseビルドします。
Setup.exemsiファイルが出来上がるので、この2つを配布します。
wbg15-30.png

■インストール

一般ユーザーでSetup.exeを実行してみます。

「次へ」を選択します。
wbg15-31.png

「次へ」を選択します。
wbg15-32.png

「次へ」を選択します。
wbg15-33.png

「閉じる」を選択します。
wbg15-34.png

デスクトップとスタートメニューにショートカットが作成されました。
UACのダイアログを出さずにインストールすることができました。
wbg15-35.png

ユーザーのLocalフォルダ配下にインストールされています。
wbg15-36.png

「アプリと機能」の一覧に追加されました。
wbg15-37.png

■バージョンアップ

メインのプロジェクトを更新してバージョン情報も更新します。
(プロジェクトのプロパティ、「アプリケーション」の「アセンブリ情報」)
wbg15-40.png

インストーラープロジェクトのVersionプロパティを更新します。
ProductCodeを更新するか聞いてくるので「はい」を選択し、ソリューションをリリースビルドします。
wbg15-41.png

Setup.exeを起動してインストールすると新しいバージョンで上書きされます。
wbg15-42.png

:bulb:バージョンアップ時、上書きインストールできて最新版が起動できることは必ず確認しましょう。
設定を失敗していると、インストールが続行できなかったり、一見インストール成功したように見えても中身が古いバージョンのままになることもあります。

おしまい


<< 最初の記事   < 前の記事   次の記事 >

63
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
63
Help us understand the problem. What is going on with this article?