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

问题描述 投票:0回答:1

当卸载软件以完成调用C ++ DLL中的函数的完整清理时。为此,我将DLL文件放在临时目录中。然后在Uninstall部分调用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
nsis
1个回答
0
投票

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

如果你是这个.DLL的作者,你应该考虑编写一个NSIS插件,然后它只是一行代码,不需要System::Call

© www.soinside.com 2019 - 2024. All rights reserved.