Question

En tant que service à mes utilisateurs Je voudrais fournir un script de désinstallation pour supprimer complètement toutes les traces de mon application sur Mac OS X. L'application est installée à l'aide d'un paquet plutôt que d'être simplement glissés dans le dossier Applications, car il est un application de type démon qui nécessite également d'exécuter un script lors de l'installation à lancer.

Ma pensée est d'inclure un fichier appelé uninstall.sh et placez-le dans /Library/Application Support/com.<mycompany>.<myapplication>/ et reportez-vous à cela de la documentation de l'application. Le but est essentiellement d'arrêter le démon si la course, Décharger et supprimer le plist correspondant ainsi que supprimer tous les fichiers d'application. Est-ce son raisonnable ou y at-il de meilleures méthodes pour y parvenir?

Aussi je me demande s'il est bon d'enlever également des traces de l'emballage en utilisant pkgutil --forget - si je ne le fais pas, la prochaine fois que le paquet est installé, il apparaît comme étant mis à niveau au lieu de installé. Toute recommandation ou des pointeurs vers des informations meilleures pratiques?

Y at-il aucun moyen standard de faire sur OS X?

Était-ce utile?

La solution

Il n'y a aucun moyen standard de faire sur OS X. Oui, choquant, je sais. Apple met en garde constamment tout le monde loin des installateurs de paquet (entre autres en fournissant une documentation insuffisante pour eux). Ils utilisent alors exclusivement d'installation de package pour leurs propres applications autonomes .... allez comprendre.

Oui, vous devez inclure pkgutil --forget.

Si vos clients sont à l'aise avec ce genre de script, votre approche semble bien. S'ils veulent un « double-clic sur elle », alors vous devriez probablement mettre le désinstalleur en /Applications, mais il faut éviter que si vous le pouvez.

Si vous avez une interface graphique, élément d'état ou de préférence Panel, il est agréable de mettre un bouton « Désinstaller » ou élément de menu il plutôt que de les obliger à aller mess avec Terminal.

BTW, si vous allez chercher le Guide Software Delivery, il a été déplacé pour un an maintenant, alors qu'ils "mise à jour" il.

Autres conseils

l'incapacité de supprimer des paquets m'a mis sur écoute pendant des années, donc j'ai écrit un outil pour désinstaller des paquets:

http://www.corecode.at/uninstallpkg/index.html

est un peu mieux que les scripts shell pour le faire flotter car il veille à ne jamais supprimer tous les fichiers qui sont utilisés par les autres packages installés

J'ai une application similaire et est tombé sur la même question. L'approche que j'ai été l'un que j'ai vu d'autres applications utiliser. Plutôt que de simplement distribuer le programme d'installation de .pkg, l'envelopper dans un fichier .dmg. Le script de désinstallation peut être inclus dans le .pkg dans le .dmg.

Le script de désinstallation est ensuite renommé « uninstall.tool ». L'extension .Outil permet aux utilisateurs d'exécuter le script en double-cliquant, plutôt que d'avoir à l'exécuter à partir de la ligne de commande.

La façon dont je résolu ce problème était d'utiliser Automator , créer un application document et puis ajoutez les actions de dialogue et de script. Enfin enregistrez votre document d'application Automator et vous vous retrouvez avec une simple application de GUI pour exécuter la désinstallation.

Souvent, l'action de désinstallation nécessite des privilèges d'administrateur - je résolu ce problème dans Automator en exécutant une action de script shell qui génère un autre script shell qui peut alors en course dans une action AppleScript comme suit:

on run {input, parameters}
    do shell script "/tmp/uninstaller.sh" with administrator privileges
    return input
end run

Un peu non conventionnel, mais ne sont pas tous ces. Je Homebrew et fût installé. J'ai pu désinstaller un .pkg ce qui suit:

 brew cask uninstall --force <pkg_name>

ex. infusion tonneau désinstallation --force dockertools

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top