InstallShield seems ubiquitous when it comes to installer scripting, at least based on my experience with companies I’ve worked for so far. But for my side projects, I’ve always been a fan of InnoSetup. It is simple to use and Pascal is not really that bad. It is free and can do probably all the things you require for an installer.
Here’s an example of an InnoSetup script that I have been using as baseline for creating installers for Windows.---
If you have any questions or feedback, please reach out @flowerinthenyt.