2011-03-15 10 views
16

Como un servicio para mis usuarios me gustaría proporcionar un script de desinstalación para eliminar por completo todos los rastros de mi aplicación en Mac OS X. La aplicación se instala utilizando un paquete en lugar de simplemente ser arrastrado la carpeta Aplicaciones porque es una aplicación de tipo daemon que también requiere ejecutar un script en la instalación para iniciarse.Desinstalador para el paquete en Mac OS X

Mi idea es incluir un archivo llamado uninstall.sh y colocarlo en /Library/Application Support/com.<mycompany>.<myapplication>/ y consultarlo desde la documentación de la aplicación. El objetivo es básicamente detener al daemon si ejecuta, descarga y elimina el plist correspondiente, así como eliminar cualquier archivo de aplicación. ¿Suena razonable o hay mejores métodos para lograr esto?

También me pregunto si es una buena práctica eliminar también los rastros del paquete usando pkgutil --forget - si no lo hago, la próxima vez que se instale el paquete aparecerá como actualizado en lugar de instalado. ¿Alguna recomendación o sugerencia para mejorar la práctica de la información?

¿No hay una forma estándar de hacerlo en OS X?

+4

No debe usar puntos en nombres de carpetas como este - si echa un vistazo a su carpeta '/ Library/Application Support /', verá que es una práctica común simplemente use el nombre de su Aplicación para esa carpeta. – Asmus

+0

@Asmus: Gracias, cambiaré a usar/Library/Application Support//. – villintehaspam

Respuesta

16

No existe una forma estándar de hacerlo en OS X. Sí, impactante, lo sé. Apple advierte constantemente a todos los instaladores de paquetes (entre otras cosas, al proporcionarles documentación insuficiente). Luego usan exclusivamente instaladores de paquetes para sus propias aplicaciones independientes ... vaya figura.

Sí, debe incluir pkgutil --forget.

Si sus clientes se sienten cómodos con este tipo de script, entonces su enfoque suena bien. Si quieren un "doble clic en él", probablemente debas poner el desinstalador en /Applications, pero evita eso si puedes.

Si tiene una GUI, un Elemento de estado o un Panel de preferencias, entonces es bueno poner allí un botón o elemento de menú "Desinstalar" en lugar de tener que meterse con Terminal.

Por cierto, si busca la Guía de entrega de software, ha sido moved durante un año más o menos, mientras la "actualizan".

3

Tengo una aplicación similar y me encontré con el mismo problema. El enfoque que tomé fue uno que he visto usar otras aplicaciones. En lugar de simplemente distribuir el instalador .pkg, envuélvalo en un archivo .dmg. La secuencia de comandos de desinstalación se puede incluir con .pkg en .dmg.

La secuencia de comandos de desinstalación se renombra a "uninstall.tool". La extensión .tool permite a los usuarios ejecutar el script haciendo doble clic, en lugar de tener que ejecutarlo desde la línea de comando.

3

La manera en que lo resolví fue usar Automator, crear un documento de la aplicación y luego agregar acciones de diálogo y script. Finalmente guarde su documento de la aplicación Automator y obtendrá una aplicación GUI simple para ejecutar la desinstalación.

A menudo la acción de desinstalación requiere privilegios de administrador - He resuelto esto en Automator mediante la ejecución de una acción shell script que genera otro script que puede entonces por carrera en una acción applescript de la siguiente manera:

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

la incapacidad de eliminar paquetes me ha pinchado durante años, por lo que he escrito una herramienta para desinstalar paquetes:

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

es un poco mejor que los scripts de shell para hacerlo flotando alrededor de beca utilizarlo asegura que nunca se elimine ningún archivo que sea utilizado por otros paquetes instalados

+1

aplicación funcionó perfectamente para mí, gracias! – snacks

+0

PKG Uninstaller muestra un error cuando intento eliminar paquetes de la biblioteca de sonidos de Logic Pro X. Dice que no puede eliminar los paquetes debido a la Protección de Integridad del Sistema. – rraallvv

+0

@rraallvv: 1.) stackoverflow no es un canal de soporte para aplicaciones aleatorias, contáctenos directamente con sus comentarios 2.) desde 10.11 SIP (Protección de Integridad del Sistema) bloquea cualquier aplicación para modificar archivos del sistema ... si desea eliminar un paquete que se ha instalado en esas ubicaciones protegidas que tiene que desactivar la Protección de integridad del sistema (temporal o permanentemente) – user1259710

1

Ligeramente poco convencional, pero ¿no es ésto? Tengo Homebrew y cask instalado. Pude desinstalar un .pkg con lo siguiente:

brew cask uninstall --force <pkg_name> 

ex. brew cask uninstall --force dockertools

+0

(1) Esto supone que 'dockertoolbox' se instaló a través de Homebrew y cask. (2) Esta pregunta es para aplicaciones generales de Mac OS, no solo 'dockertoolbox'. La validez de tu respuesta es cuestionable. – rayryeng

+0

Sorprendentemente, no, dockertoolbox se instaló a través del instalador de osx desde un .pkg y sin embargo brew cask con la opción --force fue capaz de desinstalar dockertoolbox. – buildmaestro

+0

Eso es interesante, pero aún esta pregunta es aplicable a los paquetes OSX generales. Su respuesta es solo para un paquete específico. – rayryeng