コンピューター100%

.NET Visual Studio Installerを使ったインストーラの作成

 Visual Studio .NET には作成したソフトを配布するときに使うインストーラ作成機能があります。
 名称はよくわからないのですが、「Visual Studio Installer」などというようです。
 (Windows Installerは有名ですが、それとは違います。)

 どんなことができるかといいますと、色々簡単に作れますし、様々なカスタマイズも行えます。

・スタートメニューにショートカットを登録
・デスクトップにショートカットを作成
・拡張子をファイルに関連づける
・市販されているソフトのようにシリアル番号入力
・.NETFrameworkがインストールされてない場合は自動インストール
・以前のバージョンのファイルがあるかどうか確認して、存在しない場合だけファイルをコピーする

一例としてこうしたことなどができます。
1つづつみていきましょう。

ソフトにInstallerを付ける
 まず最初にインストーラーを追加する必要があります。
 ソリューションエクスプローラで、作成中のソリューションを選択し、右クリックします。
 出てくるメニューから[追加]→[新しいプロジェクトの追加]をクリックします。
 [追加]→[新しいプロジェクトの追加]

 プロジェクトの種類ペイン(左)の [セットアップ/デプロイメント プロジェクト] をクリックし、テンプレート ペイン(右)の [セットアップ プロジェクト] をクリックします。
 [プロジェクト名] ボックスに「プロジェクト名 Installer」などと入力し[OK]をクリックします。
 プロジェクト名 Installer

   すると、インストーラーが作成されますが、そこにプロジェクトを追加する必要があります。
 ソリューションエクスプローラで、作成したインストーラーを右クリックして、[表示]-[ファイルシステム]と選択します。
 [表示]-[ファイルシステム]

   [アプリケーションフォルダ]の中に入り、右側の領域の中で右クリック→[追加]-[プロジェクト出力]を選びます。
 [追加]-[プロジェクト出力]

   でてきたウインドウの中から[プライマリ出力]を選び、[OK]をクリックします。
 [プライマリ出力]を選び、[OK]

 これでexeファイルがインストールされます。

スタートメニューにショートカットを登録

スタートメニューにソフトへのショートカットを作成する方法です。
[ファイルシステム]タブの左側から[ユーザーのプログラムメニュー]を開きます。
 [ユーザーのプログラムメニュー]

右側で右クリックし、[追加]-[フォルダ]を選びます。フォルダの名前を入力します。通常はソフト名でしょう。
 [追加]-[フォルダ]

今作ったフォルダの中(右側)を右クリックし、[新しいショートカットの作成]を開きます。
[アプリケーションフォルダ]にはいり、「〜のプライマリ出力」を選択して[OK]をクリックします。
 「〜のプライマリ出力」

ショートカットの名前を付ければスタートメニューへのショートカット登録は完了です。
 ショートカットの名前

デスクトップにショートカットを作成

こちらはデスクトップにソフトへのショートカットを作成する方法です。
[ファイルシステム]タブの左側から[ユーザーのデスクトップ]を開きます。
右側を右クリックし、[新しいショートカットの作成]を開きます。
[アプリケーションフォルダ]にはいり、「〜のプライマリ出力」を選択して[OK]をクリックします。
ショートカットの名前を付ければデスクトップにソフトへのショートカットアイコンがインストール時に作成されます。
そのプロパティウインドウで以下を設定します。

拡張子をファイルに関連づける

これはデータファイルをソフトに関連付ける設定です。
[ファイルの種類]タブを開きます。
 [ファイルの種類]

[対象コンピュータ上のファイルの種類]上で右クリックし、[ファイルの種類の追加]をクリックします。
 [ファイルの種類の追加]

名前を入力します。これは拡張子とはまた別で、半角英数の方がよいようです。
そして、プロパティを以下のように設定します。
 プロパティ

Command[アプリケーション]フォルダの「〜プライマリ出力」
Descriptionその拡張子のファイルの概要
Extensions拡張子
Iconアイコン(事前にアプリケーションフォルダにアイコンを追加しておく)

市販されているソフトのようにシリアル番号入力

この機能を使えば、商用ソフトやシェアウェアなど、不正コピーを少しでも減らすためプロダクトキーを入力しない限りインストールが続行できなくする機能があります。
ただし、このシリアル番号設定はかなり特殊です。
1文字1文字指定するのではなくて特定の指定したパターンに当てはめて検査するだけです。
そのパターンは次の2つです。
「%%%%」は数字で、4つの数字を合計して7で割った場合の余りが0になる数字
なら何であっても通ってしまいます。
「????」は文字列であれば何でも構わないようです。

例)「%%%%-????-????-%%%%-%%%%」
このパターンに当てはまるシリアルは、一例として
「5180 UQAL FRHF 8346 2973」「4296 YEAL QZMP 3211 3452」などかなりあります。
これを知っている人ですと簡単に解けるのではっきりいって危ないです。
1文字1文字指定するシリアルチェック機能はプログラムの方で自作して初回起動時にチェックするなどを実装するほかなさそうです。

ちょっと頼りないですが、このシリアル番号を導入するには、[ユーザーインターフェイス]タブを開きます。
 [ユーザーインターフェイス]

[開始]の上で右クリックし、[ダイアログの追加]を選びます。
 [ダイアログの追加]

ユーザー情報を選択して[OK]ボタンをクリックします。
 ユーザー情報を選択して[OK]

[ユーザー情報]というのができるので位置を移動させておきます。
 [ユーザー情報]というのができるので位置を移動

プロパティを次のように設定します。
 プロパティ

BannerBitmapロゴの画像です。
SerialNumberTemplateシリアルのパターンを設定します。<と>の中に入れます。
ShowOrganization名前と会社名の入力を求めるかどうか。
ShowSerialNumberシリアルキーの入力を求めるかどうか(Trueにします)

.NETFrameworkがインストールされてない場合は自動インストール

.NETアプリケーションを実行するには.NET Frameworkのランタイムがインストールされている必要があります。
デフォルトでも.NET Frameworkが入っていないことを検知してダウンロードページへ飛ぶようですが、20MB超のファイルをダウンロードしてもらうにはユーザーの負荷が大きいのでパッケージソフトなどの場合は.NET Frameworkもパッケージに含めることになると思います。

それには、Setup.exe Bootstrapper を使うか、手動で関連付けをします。
Bootstrapper
Bootstrapperダウンロード
ダウンロードしたあとに、インストールしてください。Visual Studioを再起動する必要もあります。
このBootstrapperをインストールすると、Releaseモードでビルドした際に.NET Frameworkのファイル[dotnetfx.exeなど]がインストーラーと共に生成されます。
できた[setup.exe]を最初に開けば.NET Frameworkのインストール+ソフトのインストールが行えますが、最初にソフトのインストーラー(拡張子.msi)を開いてしまうとBootstrapperを使ってもダウンロードページに飛ばされてしまいます。
そこで、ダウンロードページをURLでなくて、直接[setup.exe]と、ファイル名を指定することで、ダウンロードページの代わりに同じフォルダにある.NET Frameworkのインストールをはじめられます。
 .NET Framework

  参考:MSDN

以前のバージョンのファイルがあるかどうか確認して、存在しない場合だけファイルをコピーする
 これはバージョンアップした際など以前のデータファイルを継続して使いたい場合、上書きしない設定にすることです。
 まず、対象となるファイルを追加します。[ファイルシステム]タブの[アプリケーションフォルダ]を開いておき、右側から[追加]-[ファイル]をクリックします。
 [追加]-[ファイル]

   [起動条件]タブの[対象コンピュータの検索]上で右クリックし、[ファイル検索の追加]を行います。
 [ファイル検索の追加]

   そして名前を適当に付けます。そのプロパティを設定します。
 プロパティ

 
FileName検索するファイル名を指定します。
Folderどのフォルダの中を検索するかの指定です。
Property検索結果がここで指定した変数に入り、後で使います。(この場合[FILEEXISTS1])
 先ほど[アプリケーションフォルダ]に追加した、検索対象になっているファイルのプロパティを設定します。
ConditionFILEEXISTS1==""
 検索した結果がこの場合[FILEEXISTS1]という変数に入っています。(ファイル検索のPropertyプロパティで指定した変数名)
 Conditionプロパティは式になっていて、Trueの場合にそのファイルがインストールされます。
 この場合は検索した結果が何も無い場合にインストールするので、[FILEEXISTS1==""]と設定します。

インストーラ参考
MSDN
宇宙仮面のC# Programming Windows.Forms インストーラの作成(ディプロイメント)
ページ内検索
文章内から検索:
ランキング
著作権表記
Copy right © Ship.
PR