nsis - 在卸载时从任务栏中删除固定图标

时间:2017-03-15 16:55:07

标签: nsis uninstall taskbar uninstaller

我正在为一家公司开发应用程序,并且他们要求如果应用程序固定到任务栏,则卸载应用程序时应取消固定。如果我只是从quicklaunch \ user pinned \ taskbar中删除该图标,那么它会在任务栏上留下一个空白图标。

我需要以某种方式实际取消它。我唯一遇到的是安装winshell插件(http://nsis.sourceforge.net/WinShell_plug-in),然后调用IStartMenuPinnedList :: RemoveFromList(https://msdn.microsoft.com/en-us/library/windows/desktop/bb774817(v=vs.85).aspx

如果我不需要,我宁愿不安装插件。有没有人有任何建议?

1 个答案:

答案 0 :(得分:2)

NSIS没有此接口的本机支持,因此您必须使用插件。如果你想避免使用第三方插件(由我编写),那么你可以改用System插件:

!include "LogicLib.nsh"
!include "Win\COM.nsh" ; NSIS v3+

!macro UnpinShortcut lnkpath
Push $0
Push $1
!insertmacro ComHlpr_CreateInProcInstance ${CLSID_StartMenuPin} ${IID_IStartMenuPinnedList} r0 ""
${If} $0 P<> 0
    System::Call 'SHELL32::SHCreateItemFromParsingName(ws, p0, g "${IID_IShellItem}", *p0r1)' "${lnkpath}"
    ${If} $1 P<> 0
        ${IStartMenuPinnedList::RemoveFromList} $0 '(r1)'
        ${IUnknown::Release} $1 ""
    ${EndIf}
    ${IUnknown::Release} $0 ""
${EndIf}
Pop $1
Pop $0
!macroend

Section Uninstall
!insertmacro UnpinShortcut "$SMPrograms\MyApp.lnk"
Delete "$SMPrograms\MyApp.lnk"
SectionEnd