我有RequestExecutionLevel user
的安装程序(我希望保留在没有管理员权限的情况下启动安装程序的可能性)。但我想知道一种删除当前用户的所有应用程序快捷方式的方法。这样的命令是否存在?
答案 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
安装程序删除用户创建的其他自定义快捷方式不是正常行为。理论上,您可以使用FindFirst
和Win\COM.nsh
中的IShellLink COM接口来枚举和检查每个快捷方式,并删除指向您的应用程序的快捷方式。
可以使用WinShell plug-in或using the COM interfaces directly删除固定的快捷方式和跳转列表。