Search code examples
nsis

DLL Function is not calling from the NSIS installer when uninstalling


When uninstaling the software to do the complete cleanup calling the function in the C++ DLL . To achieve this I am placing the DLL file in the temp directory. Then in the Uninstall section calling the DLL function. But it is not calling the function.

If I place that DLL file in the installed directory then it is calling the DLL function. But I should not place it in the installed directory because I am calling this function when uninstalling.

Is it the correct way that I am doing? or is there any other way?

Below is my code snippet:

Section "MyApp"

InitPluginsDir
SetOutPath $PluginsDir
File "C:\Desktop\KillNofificationSoftly.dll"
SetOutPath $Temp 
MessageBox MB_OK "Temp Path $Temp"
System::Call 'KERNEL32::AddDllDirectory(w "$PluginsDir")'

SetOutPath $INSTDIR  

SectionEnd

Section "Uninstall"

System::Call "$PluginsDir\KillNofificationSoftly.dll::KillMeSoftly() i.r0 ?e"
Pop $1 ; LastError
${If} $0 = 0
    MessageBox MB_OK "Success"
${EndIf}

SectionEnd

Solution

  • You are extracting the .DLL in the installer! $PluginsDir is deleted when the installer finishes. Move all the code to the uninstaller section.

    If you are the author of this .DLL you should consider writing a NSIS plug-in, then it becomes just a single line of code, no need for System::Call.