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

问题描述:

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

+0

你真的尝试过吗?我不明白为什么你只谈论快捷键的特定用户,并适用于所有用户不NSIS的快捷方式无法做到这一点,只要。 – Anders

+0

我该怎么办?卸载当前用户的所有快捷方式后不会自动删除。 –

的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的COM的IShellLink接口来枚举和检查每一个快捷方式,删除指向您的应用程序快捷方式在理论上做到这一点。

固定快捷方式和跳转列表可以使用WinShell plug-inusing the COM interfaces directly删除。

+0

'这是不正常的行为安装删除由users.'创建的其他自定义快捷键,但这些快捷方式将卸载之后被打破。 “FindFirst”真的很快命令,或者我不应该试试这个?我的意思是,如果这会执行很长时间(例如超过一分钟),我不会这样做。 –