卸载时未从NSIS安装程序调用DLL函数

时间:2019-03-21 10:26:45

标签: nsis

在卸载软件以进行完整清理时,调用C ++ DLL中的函数。 为此,我将DLL文件放在temp目录中。然后在“卸载”部分中调用DLL函数。但是它没有调用函数。

如果我将该DLL文件放在已安装的目录中,则它正在调用DLL函数。 但是我不应该将其放在安装目录中,因为在卸载时会调用此函数。

这是我做的正确方法吗?还是还有其他方法?

下面是我的代码段:

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

1 个答案:

答案 0 :(得分:0)

您正在安装程序中解压缩.DLL!安装程序完成后,$PluginsDir被删除。将所有代码移到卸载程序部分。

如果您是此.DLL的作者,则应考虑编写NSIS插件,然后它就变成了一行代码,不需要System::Call