Inno Setupでは、特定の行を特定のプラットフォームでのみ実行するために、Check
パラメータを使用できます。例えば、64ビットのWindowsでのみ特定の行を実行したい場合、次のように書くことができます¹:
[Run]
Filename: "MyProgram.exe"; Check: IsWin64
この例では、IsWin64
という条件がtrue
の場合にのみMyProgram.exe
が実行されます。逆に、32ビットのWindowsでのみ特定の行を実行したい場合は、not IsWin64
という条件を使用できます¹。
また、特定のWindowsバージョンでのみ特定のコマンドを実行したい場合は、MinVersion
やOnlyBelowVersion
パラメータを使用できます³。例えば、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.
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
を指定しますが、これらの実行ファイルを直接指定せずにスクリプトを実行する方法もあります。具体的には、スクリプトファイルの拡張子(.ps1
)を利用して、関連付けられたアプリケーションで開くことができます。
Inno Setupでは、shellexec
フラグを使用して、シェルの関連付けを利用してファイルを開くことができます¹。以下にその例を示します: