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

时间:2017-06-22 07:47:09

标签: nsis shortcut uninstaller

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

1 个答案:

答案 0 :(得分:1)

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-inusing the COM interfaces directly删除固定的快捷方式和跳转列表。