NSIS 可以删除非管理员当前用户的所有快捷方式吗?

Can NSIS remove all shortcuts for non-admin current user?

我有一个带有 RequestExecutionLevel user 的安装程序(我想保留在没有管理员权限的情况下启动我的安装程序的可能性)。但我想知道一种为当前用户删除所有应用程序快捷方式的方法。有这样的命令吗?

Windows 将快捷方式存储在两个位置,用户私有快捷方式存储在他们的个人资料中,所有用户都可以使用的快捷方式存储在所有用户都可访问(但不一定可写)的文件夹中。

试试运行这样的东西

Section
SetShellVarContext current ; Used for demonstration purposes, it is the default context
DetailPrint $StartMenu
DetailPrint $SMPrograms
DetailPrint $Desktop
DetailPrint ---
SetShellVarContext all
DetailPrint $StartMenu
DetailPrint $SMPrograms
DetailPrint $Desktop
SectionEnd

你应该得到这样的东西

C:\Users\Anders\AppData\Roaming\Microsoft\Windows\Start Menu
C:\Users\Anders\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
C:\Users\Anders\Desktop
---
C:\ProgramData\Microsoft\Windows\Start Menu
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
C:\Users\Public\Desktop

具有 RequestExecutionLevel user 的卸载程序将只能删除用户(当前)上下文中的快捷方式,但如果您的安装程序首先将它们写入那里,则这不是问题。

NSIS 不会自动删除快捷方式,您必须手动删除:

Section "Installer"
SetOutPath $InstDir
File "MyApp.exe"
WriteUninstaller "$InstDir\Uninst.exe"
CreateDirectory "$SMPrograms\MyApp"
CreateShortcut "$SMPrograms\MyApp\MyApp.lnk"
CreateShortcut "$SMPrograms\MyApp\MyApp (No extensions).lnk" "-NoExt"
SectionEnd

Section "Uninstaller"
Delete "$SMPrograms\MyApp\MyApp.lnk"
Delete "$SMPrograms\MyApp\MyApp (No extensions).lnk"
RMDir "$SMPrograms\MyApp"
Delete "$InstDir\MyApp.exe"
Delete "$InstDir\Uninst.exe"
RMDir "$InstDir"
SectionEnd

安装程序删除用户创建的其他自定义快捷方式是不正常的行为。理论上,您可以通过使用 FindFirstWin\COM.nsh 中的 IShellLink COM 接口来枚举和检查每个快捷方式并删除指向您的应用程序的快捷方式。

可以使用 WinShell plug-in or by 删除固定的快捷方式和跳转列表。