How to set the whole installer invisible while using 'ExecWait' in NSIS? - nsis

I'm installing a program with my installer and run it with 'ExecWait'.
Is there a way to hide the window of the installer while the program is executed?
The installer should show up again and continue when the user quits the executed program.
Is there any way to achieve that?

HideWindow
ExecWait '"$InstDir\Foo.exe" "space bar" /baz'
BringToFront

Related

Open File during Installation

I am using NSIS to create installer. Also I need to install other program (I have his installation file). How add second installer to automatically run it during first installation?
The simplest is to run the file (which must be first extracted to some directory,. e.g. $TEMP) with
ExecShell "open" "$INSTDIR\app.exe"
or with
ExecWait '"$INSTDIR\someprogram.exe"' $0
if you want to wait for program to finish.
Also consider many possibilities: whether the app should be run with some parameter, in Silent mode or elevated with admin rights or run as original user...

Execute another installer silently within your Nsis installer

I am trying to execute ffdshow.exe silently within my nsis installer but ffdshow doesnt seem to work with my method but MatroskaSplitter.exe and other installers have run silently with the same method.
File "..\Prerequisites\ffdshow_rev4515_20130612_clsid.exe"
ExecWait '"$INSTDIR\ffdshow_rev4515_20130612_clsid.exe" /S'
Are you sure ffdshow uses NSIS?
It looks to me like they are using Inno so you could try /silent or /sp- /silent /norestart.

How can I make my NSIS silent installer block until complete?

When I run a silent NSIS installer (from the console, as in installer.exe /S /D=C:\Foo) it immediately moves to the background. I'd like to wait until it has finished installing before I do anything else. Is there a flag I can pass to tell the installer to be blocking?
You don't say anything about how you start the process in your question! NSIS installers are always "blocking", for a silent installer this means you just have to wait for the child process to end.
If the parent process is also a NSIS installer you can do ExecWait '"c:\path\to\installer.exe" /S /D=C:\Foo' or if it is a batch file you must use start "" /WAIT "c:\path\to\installer.exe" /S /D=C:\Foo

How to use REMOVE feature in NSIS script?

I have written nsis script for creating exe file.I have included REPAIR and REMOVE feature in my script.By default i have checked REPAIR Radio button.If the user clicks remove button it will remove the already installed file using following command
Function Remove
Exec "$INSTDIR\uninstall.exe"
Quit
FunctionEnd
If the user click the remove button it will open the un install window and the user click the uninstall button then only the un install operation will be proceeded.
|Is there any way without asking user input we'll do the remove operation if the user select the remove option?
Exec '"$INSTDIR\uninstall.exe" /S'
You can read more about the command line options in the manual.

Uninstall is still running after installer exits

I am not sure how to put this here, I will do my best. Please help me out
I have a patch installer, which installs and uninstalls as expected. But after uninstalling the patch from program files, I have tried uninstall other software. All I got a pop message saying that let the uninstall finish uninstalling.
All I figured out is at the end of uninstalling my patch, I am starting a process by executing .exe file. My uninstaller waits for that process to quit, which I do not want to quit.
Other option I have is to force the user to reboot after uninstalling the patch, which I do not wish to do.
I tried Exec, ExecDos, and ExecCmd with /ASYNC, but I still see the same problem.
Try 1
ExecShell open "$INSTDIR\system\teven.exe"
Try 2
ExecDos::exec /NOUNLOAD /ASYNC "$INSTDIR\system\teven.exe" ""
Pop $0
ExecDos::isdone /NOUNLOAD $0
Can anyone help me to solve this. How can I start teven.exe and left it running and make my uninstaller not waiting teven.exe to quit.
You pretty much have to force the uninstaller to wait if you are going to do other things after the uninstaller completes. When you uninstall from Add/Remove programs Windows even forces a wait for all your child processes started by the uninstaller...
Why are you using /ASYNC if you want to wait? (Edit: I guess you don't want to wait?) ExecDos::isdone does not wait, it just checks, use ExecDos::wait if you want to wait.
If you are not using advanced options and don't need stdin input then you don't really need to use 3rd-party plugins:
If teven is a console application and you want to hide the console window (and wait):
nsExec::Exec '"$INSTDIR\system\teven.exe"'
otherwise:
ExecWait '"$INSTDIR\system\teven.exe"'
If you actually don't want to wait you can just use Exec but Windows might force a wait anyway when uninstalling...

Resources