2016-10-18 5 views
2

Nous avons une application Windows avec un composant qui écrit dans le dossier ProgramData. Lorsque le programme de désinstallation est exécuté, les fichiers générés par ce composant ne sont pas supprimés. En utilisant l'UAC de RunElevated, nous avons d'abord installer un composant tiers dans ProgramDataNSIS RMDir n'a pas réussi à supprimer les fichiers créés par l'utilisateur dans ProgramData

SetOutPath "$RENDERER_INSTALL_DIR" 

LogSet On 
File /r "${MAGNIFY_DIR}/secRenderer/Arelle/*" 
LogSet Off 

AccessControl::GrantOnFile "$RENDERER_INSTALL_DIR" "(S-1-5-32-545)" "FullAccess" 

Pendant le fonctionnement, ce composant écrit dans son propre répertoire d'installation dans ProgramData

Pendant la désinstallation, nous essayons de supprimer le dossier créé ci-dessus , utilisant de nouveau UAC :: RunElevated

RMDir /r $RENDERER_INSTALL_DIR 

Cependant, les fichiers créés en actionnant le composant ne sont pas supprimés.

Nous avons observé que ces fichiers appartiennent à l'utilisateur qui a utilisé le composant, et non à l'administrateur, qui possède néanmoins des autorisations de lecture, d'écriture et de suppression complètes.

Comment pouvons-nous faire ce travail?

+0

Je vous recommande de ne pas utiliser le plug-in UAC. – Anders

Répondre

2

Il y a deux inconnues ici pour vraiment répondre à la question.

Pourquoi le plug-in UAC est-il impliqué? Il est seulement utile inférieur votre accès au système! Il est également difficile à utiliser correctement, donc je vous recommande d'essayer sans.

Est-ce que ce composant tiers modifie l'ACL? Vérifiez l'ACL avant de désinstaller.

Est-il possible que file system virtualization vous trompe? Vérifiez le dossier VirtualStore.

Que dit Process Monitor? Obtenez-vous ACCESS_DENIED ou une autre erreur?

Donner à tous les utilisateurs un accès complet aux dossiers sous ProgramData n'est pas recommandé et tout composant qui en a besoin ne respecte pas les consignes du logo Windows.

+1

Merci - le moniteur de processus nous a montré que la ligne RMDir n'était pas en cours d'exécution, et nous ne l'avons pas réalisé parce que nous n'avions pas réalisé que le programme de désinstallation supprimerait automatiquement les fichiers qu'il connaissait. –