卸载时 DLL 函数未从 NSIS 安装程序调用
DLL Function is not calling from the NSIS installer when uninstalling
卸载软件以进行完全清理时调用 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 ; LastError
${If} [=10=] = 0
MessageBox MB_OK "Success"
${EndIf}
SectionEnd
您正在提取安装程序中的 .DLL! $PluginsDir
在安装程序完成时被删除。将所有代码移至卸载程序部分。
如果你是这个.DLL的作者你应该考虑写一个NSIS插件,然后它就变成一行代码,不需要System::Call
.
卸载软件以进行完全清理时调用 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 ; LastError
${If} [=10=] = 0
MessageBox MB_OK "Success"
${EndIf}
SectionEnd
您正在提取安装程序中的 .DLL! $PluginsDir
在安装程序完成时被删除。将所有代码移至卸载程序部分。
如果你是这个.DLL的作者你应该考虑写一个NSIS插件,然后它就变成一行代码,不需要System::Call
.