この記事はネットユーザーからの投稿です。.NETは無料、オープンソース、クロスプラットフォームです。
作者:傲慢と偏見
原文タイトル:Inno Setup を使用して VS コンパイル時に自動でインストールパッケージをビルドする
原文リンク:https://www.cnblogs.com/chonglu/p/17566940.html
技術系記事の投稿を歓迎します。テーマは自由ですが、原稿料はありません...

1. 概要
C/S 開発に携わる多くの方は、インストールパッケージを作成する必要がある場面に遭遇することがあるでしょう。パッケージングツールも NSIS、InstallShield、Wix Toolset、ClickOnce など様々あります。ここでは Inno Setup を例に、インストールパッケージのビルド方法と、Visual Studio でプログラムをコンパイルする際に自動でインストールパッケージをビルドする方法を簡単に説明します。
2. 操作デモ
ヒント:自動ビルドを目的とする場合は、記事の末尾から読むことをお勧めします。前半では手動ビルドの簡単なデモを示します。
2.1. 公式サイトから Inno Setup パッケージングツールをダウンロード
Inno Setup Downloads をクリックしてダウンロード:

中国語が必要な場合は、中国語パックをダウンロードする必要があります。ダウンロード先:Inno Setup Translations

ダウンロード後、手動で Inno Setup のインストールディレクトリにある Languages フォルダに配置します。

2.2. パッケージプロジェクトを作成

2.3. アプリケーションの基本情報を入力

2.4. アプリケーションのインストールディレクトリを入力

2.5. VS でプロジェクトのプロパティを右クリックし、出力パスを変更します。複数プロジェクトがある場合はすべて同じにします。

2.6. パッケージに含めるファイルを選択

- Application main executable file: アプリケーションのメイン実行ファイル
- Other application files: メインプログラムが依存するプロジェクトやサードパーティの依存ファイルなど。ここでは出力ディレクトリを直接選択することをお勧めします。
2.7. ファイルタイプの関連付け

この機能を使用しない場合は、通常チェックを外します。
2.8. アプリケーションのショートカット作成

2.9. アプリケーションの使用許諾ファイル

2.10. インストールモードの選択

2.11. インストールパッケージの言語選択

公式では中国語パックは提供されていませんが、公式サイトにはサードパーティが提供・保守する中国語パックがあります。必要な場合は Inno Setup Translations からダウンロードし、手動で Inno Setup のインストールディレクトリ内の Languages フォルダに配置してください。リンクは前述のとおりです。
2.12. インストールパッケージの設定

2.13. 設定が完了するとスクリプトが生成されます

2.14. コンパイルが完了すると、ディレクトリに exe ファイルが生成されます。ダブルクリックでインストールを開始できます。

2.15. インストール結果

以上で、簡単なインストールパッケージが完成しました。
しかし...これが本題ではありません。明らかに、プログラムに変更があるたびに Inno Setup エディタで手動でコンパイルしてインストールパッケージを生成するのは手間がかかります。
3. 自動ビルドのインストールパッケージ
3.1. 先ほど作成したインストールパッケージのスクリプトファイルを修正
主な修正点は、絶対パスを相対パスに変更し、メインプログラムのバージョンを自動取得するなど、他のメンバーや別のPCでコンパイルする際にエラーが発生しないようにすることです。私のスクリプトを参考にしてください。
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "傲慢与偏见"
#define MyAppPublisher "版权信息"
#define MyAppURL "https://www.cnblogs.com/chonglu"
#define MyAppExeName "Inno SetupSample.exe"
#define MyAppVersion GetVersionNumbersString("..\output\Inno SetupSample.exe")
[Setup]
; #define MyAppVersion GetVersionNumbersString("E:\01-项目代码\YZS\KJT\trunk\KJT\bin\KJT.exe")
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{72EC6D66-B10E-4E61-920F-86852D3FFA91}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\KJT
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=KJTStep
SetupIconFile=AppICon.ico
Compression=lzma
SolidCompression=yes
WizardStyle=modern
OutputDir=..\Publish
[Languages]
Name: "Chinese"; MessagesFile: "compiler:Languages\中文简体.isl"
[Files]
Source: "..\bin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
3.2. Inno Setup のインストールディレクトリをコピーして、プロジェクトディレクトリに配置
不要なファイルは削除して容量を減らしても構いません。以下のようにします。

3.3. プロジェクトのメインプログラムのビルド後イベントを設定

参考コマンド:
IF "$(ConfigurationName)" == "Release" (
"$(SolutionDir)DevOps\InnoSetup\ISCC.exe" "$(SolutionDir)DevOps\InnoSetup\KJTStep.iss"
start explorer /select,"$(SolutionDir)DevOps\Publish\"
)
デバッグへの影響を避けるため、Release モードでのコンパイル時のみコマンドを実行するように条件を追加できます。このコマンドは、ソリューションディレクトリ下の ISCC プログラムを呼び出し、インストールパッケージのスクリプトを渡して最新のインストールパッケージをビルドし、最後にエクスプローラを起動してインストールパッケージのディレクトリを開きます。
4. 効果デモ

新しいバージョンをリリースする必要があるたびに、ソリューションを Release モードに切り替えてコンパイルし、F6 でビルドするだけで、インストールパッケージが自動的に生成されます。ここではアイデアの一つを示したに過ぎません。公式ドキュメントを参照して、より完成度の高いインストールパッケージを実現してみてください。
ヒント:コードのデバッグ中にコンパイル速度が遅くなるのを避けるため、ビルド後イベントには Release モードの条件を追加することをお勧めします。ソリューションに多数のプロジェクトがある場合や、コンパイルディレクトリに多くの依存ファイルがある場合、Inno Setup のビルドが遅くなることがあります。
5. おわりに
Visual Studio のビルドイベントは非常に便利な機能で、コンパイル前やコンパイル後に、手動で行うことの多い作業を自動化できます。例えば、ビルド後イベントを利用してコードの難読化を行うこともできますが、本記事では詳細には触れません。
実際の操作でエラーが発生したり、疑問点やより良い提案があれば、コメントで議論してください。
6. 付録
- Inno Setup 公式サイト:https://jrsoftware.org/
- Inno Setup エディタ:https://jrsoftware.org/isdl.php
- Inno Setup 言語パック:https://jrsoftware.org/files/istrans/
- Inno Setup ドキュメント:https://jrsoftware.org/ishelp/