Inno Setupにおいて、インストールプラットフォームがWindowsの場合に限り、Runセクションの特定の行を実行するにはどのように書けばよいですか。

Inno Setupでは、特定の行を特定のプラットフォームでのみ実行するために、Checkパラメータを使用できます。例えば、64ビットのWindowsでのみ特定の行を実行したい場合、次のように書くことができます¹:

[Run]
Filename: "MyProgram.exe"; Check: IsWin64

この例では、IsWin64という条件がtrueの場合にのみMyProgram.exeが実行されます。逆に、32ビットのWindowsでのみ特定の行を実行したい場合は、not IsWin64という条件を使用できます¹。

また、特定のWindowsバージョンでのみ特定のコマンドを実行したい場合は、MinVersionOnlyBelowVersionパラメータを使用できます³。例えば、Windows 8以降でのみ特定のコマンドを実行したい場合は、次のように書くことができます²:

[Run]
Filename: "MyProgram.exe"; MinVersion: 6.2

この例では、Windowsのバージョンが6.2以上(つまり、Windows 8以降)の場合にのみMyProgram.exeが実行されます²。

これらのパラメータを適切に組み合わせることで、インストールプラットフォームがWindowsの場合に限り、Runセクションの特定の行を実行することが可能です。ただし、これらの条件はコンパイル時に評価されるため、インストーラの実行時に環境が変わると期待通りに動作しない場合があります。そのため、実行環境に依存する動作を行う場合は、スクリプト内で適切に条件分岐を行うことが重要です¹²。

ソース: Bing との会話 2024/2/20 (1) inno setup - how to detect 64bit platform by script - Stack .... https://stackoverflow.com/questions/3618049/how-to-detect-64bit-platform-by-script. (2) Execute different command in Inno Setup Run section based .... https://stackoverflow.com/questions/35605614/execute-different-command-in-inno-setup-run-section-based-on-windows-version. (3) Execute different BLOCK of commands in Inno Setup Run .... https://stackoverflow.com/questions/38290445/execute-different-block-of-commands-in-inno-setup-run-section-based-on-windows-v. (4) Windows Installer手引書 Part.31 セットアップランチャーを作る .... https://qiita.com/tohshima/items/a30f3c679ab30e3cf88f. (5) undefined. http://www.jrsoftware.org/ishelp/index.php?topic=scriptcheck.

Runセクションで実行したいファイルが、特定のプログラムではなくPowerShellのスクリプトの場合、どのように書けばよいですか?

Inno SetupでPowerShellスクリプトを実行するためには、Runセクションにエントリを追加します。PowerShellスクリプトが単純な場合、スクリプトファイルを直接実行せずに、PowerShellコマンドラインの-Commandスイッチを使用して実行できます¹。

[Run]
Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -Command [System.IO.File]::WriteAllText ('my.ini', 'foo=1')"; WorkingDir: {app}; Flags: runhidden

この例では、IsWin64という条件がtrueの場合にのみMyProgram.exeが実行されます¹。

また、スクリプトファイルが必要な場合は、それをインストール(例えば、インストールの一時フォルダに)し、そこから実行します¹。

[Files]
Source: "setup.ps1"; DestDir: "{tmp}"

[Run]
Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -File \\\\"{tmp}\\\\\\\\setup.ps1\\\\""; WorkingDir: {app}; Flags: runhidden

この例では、インストーラが終了すると自動的に削除される一時フォルダにsetup.ps1をインストールし、そこから実行します¹。ただし、これらの条件はコンパイル時に評価されるため、インストーラの実行時に環境が変わると期待通りに動作しない場合があります。そのため、実行環境に依存する動作を行う場合は、スクリプト内で適切に条件分岐を行うことが重要です¹。

ソース: Bing との会話 2024/2/20 (1) How to run a PowerShell Script after Inno Setup installer. https://stackoverflow.com/questions/56419077/how-to-run-a-powershell-script-after-inno-setup-installer. (2) Run a [Code] or PowerShell script in Inno Setup compiler. https://stackoverflow.com/questions/48772183/run-a-code-or-powershell-script-in-inno-setup-compiler. (3) Run a [Code] or PowerShell script in Inno Setup compiler. https://w3toppers.com/run-a-code-or-powershell-script-in-inno-setup-compiler/.

PowerShellの実行ファイルはバージョンによってpowershell.exeであったりpwsh.exeであったりすると思います。

このため実行バイナリを指定せず、関連付けを使用する方法はありますか?

PowerShellスクリプトを実行するためには通常、powershell.exeまたはpwsh.exeを指定しますが、これらの実行ファイルを直接指定せずにスクリプトを実行する方法もあります。具体的には、スクリプトファイルの拡張子(.ps1)を利用して、関連付けられたアプリケーションで開くことができます。

Inno Setupでは、shellexecフラグを使用して、シェルの関連付けを利用してファイルを開くことができます¹。以下にその例を示します: