Skip to content
⌘ NSIS Forum Archive

How to make self extracting exe ?

4 posts

viveknuna#

How to make self extracting exe ?

Hi,

I want to make a self extracting exe(abcdInstaller.exe), which runs another exe(AppInstaller.apk, this is installing abcd.apk on my pc). Below script works fine but when I run abcdInstaller.exe, it also extracts these two files on current directory(from where I'm running this exe) and runs the AppInstaller.exe.

But What I want, User just click on abcdInstaller.exe and abcdInstaller.exe will run AppInstaller.exe in background, which will do its work.



!include LogicLib.nsh
!include WinMessages.nsh


SilentInstall silent
RequestExecutionLevel user ;no elevation needed for this test
ShowInstDetails hide

# this will be the created executable archive
OutFile "abcdInstaller.exe"

InstallDir $EXEDIR

# the executable part
Section

# define the output path for the following files
SetOutPath $INSTDIR

# define what to install and place it in the output path...
# ...app...
File AppInstaller.exe
# ...and the library.
File abcd.apk

# run application
ExecShell "open" "AppInstaller.exe"

# done
SectionEnd


I tried to comment SetOutPath $INSTDIR, but then nothing happens.

Please give some suggestions.
JasonFriday13#edited
So instead of using InstallDir, you want to "install" to a temp directory. Something like this:

Section
InitPluginsDir
SetOutPath "$PLUGINSDIR"
File AppInstaller.exe
File abcd.apk
ExecWait "$PLUGINSDIR\AppInstaller.exe"
SetOutPath $temp ; don't lock %pluginsdir
SectionEnd 
Depending on the installer being run, ExecWait might not be enough.
viveknuna#
Thanks Jason,

Your script works, But I have also done in the same way.

SilentInstall silent
RequestExecutionLevel user ;no elevation needed for this test
ShowInstDetails hide

# this will be the created executable archive
OutFile "ABCD.exe"

InstallDir $EXEDIR


# the executable part
Section

# define the output path for the following files
SetOutPath $TEMP\ApkPath

# define what to install and place it in the output path...
# ...your app...
File AppInstaller.exe
# ...and the library.
File xyz.apk

# run your application
ExecWait "$TEMP\ApkPath\AppInstaller.exe"

SetOutPath $TEMP

RMDir /r $TEMP\ApkPath

# done
SectionEnd
JasonFriday13#
The reason why we use $PLUGINSDIR is because it's automatically removed when the installer exits, so you don't have to use RMDir /r "$TEMP\thisdir".