2017-06-22 5 views
-2

J'ai un installateur avec RequestExecutionLevel user (je veux préserver la possibilité de lancer mon installateur sans droits d'administrateur). Mais je veux savoir un moyen de supprimer tous les raccourcis d'application pour l'utilisateur actuel. Un tel commandement existe-t-il?NSIS peut-il supprimer tous les raccourcis pour les utilisateurs actuels non-administrateurs?

+0

Avez-vous réellement essayé? Je ne vois aucune raison pour laquelle NSIS ne peut pas faire cela tant que vous parlez seulement de raccourcis pour l'utilisateur spécifique et pas de raccourcis communs à tous les utilisateurs. – Anders

+0

Que devrais-je essayer? Après la désinstallation de tous les raccourcis de l'utilisateur actuel ne sont pas supprimés automatiquement. –

Répondre

1

Windows stocke les raccourcis à deux endroits, les raccourcis privés des utilisateurs sont stockés dans leur profil et les raccourcis qui sont disponibles pour tous les utilisateurs dans un dossier accessible (mais pas nécessairement accessible en écriture) par tous les utilisateurs.

Essayez de lancer quelque chose comme ça

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 

et vous devriez obtenir quelque chose comme ça

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 

Un désinstalleur avec RequestExecutionLevel user ne sera en mesure de supprimer des raccourcis dans les utilisateurs (en cours) contexte mais n'est pas un problème si votre installateur les écrit là en premier lieu.

NSIS ne, vous supprimez pas automatiquement des raccourcis pour le faire manuellement:

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 

Il n'est pas un comportement normal pour les installateurs pour supprimer d'autres raccourcis personnalisés créés par les utilisateurs. Vous pouvez théoriquement le faire en utilisant FindFirst et l'interface IShellLink COM dans Win\COM.nsh pour énumérer et inspecter chaque raccourci et supprimer les raccourcis qui pointent vers votre application.

Les raccourcis bloqués et les listes de sauts peuvent être supprimés avec le WinShell plug-in ou le using the COM interfaces directly.

+0

'Ce comportement n'est pas normal pour les installateurs de supprimer d'autres raccourcis personnalisés créés par des utilisateurs. Mais ces raccourcis seront interrompus après la désinstallation. Est-ce que 'FindFirst' est une commande vraiment rapide ou je ne devrais pas essayer ça? Je veux dire que si cela s'exécute très longtemps (par exemple plus d'une minute), je ne le ferai pas. –