Pregunta

Como servicio para mis usuarios, me gustaría proporcionar un script de desinstalación para eliminar completamente todos los rastros de mi aplicación en Mac OS X. La aplicación se instala utilizando un paquete en lugar de ser arrastrado a la carpeta de aplicaciones porque es un tipo de demonio de Daemon Aplicación que también requiere ejecutar un script en la instalación que se iniciará.

Mi pensamiento es incluir un archivo llamado uninstall.sh y colóquelo en /Library/Application Support/com.<mycompany>.<myapplication>/ y consulte esto desde la documentación de la aplicación. El propósito es básicamente detener el demonio si se ejecuta, descargar y eliminar la Plist correspondiente, así como eliminar cualquier archivo de aplicación. ¿Suena esto razonable o hay mejores métodos para lograr esto?

También me pregunto si es una buena práctica eliminar los rastros del paquete usando pkgutil --forget - Si no hago esto, la próxima vez que se instale el paquete, aparece como actualizado en lugar de instalar. ¿Alguna recomendación o puntería a la información mejor práctica?

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

¿Fue útil?

Solución

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

Sí, deberías incluir pkgutil --forget.

Si sus clientes se sienten cómodos con este tipo de guión, entonces su enfoque suena bien. Si quieren un "doble clic en it", entonces probablemente deberías poner el desinstalador en /Applications, pero evite eso si puede.

Si tiene una GUI, un elemento de estado o un panel de preferencias, entonces es bueno poner un botón de "desinstalar" o elemento de menú allí en lugar de exigirles que se metan con la terminal.

Por cierto, si busca la guía de entrega de software, ha sido movido Durante un año más o menos, mientras lo "actualizan".

Otros consejos

La incapacidad de eliminar los paquetes me ha molestado 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 porque se asegura de nunca eliminar ningún archivo que sea utilizado por otros paquetes instalados

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

El script de desinstalación se renombra para "desinstalar.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.

La forma en que resolví esto era usar Automator, crear un solicitud Documento y luego agregue las acciones de diálogo y script. Finalmente, guarde su documento de aplicación automator y termina con una aplicación GUI simple para ejecutar la desinstalación.

A menudo, la acción de desinstalación requiere privilegios de administrador: resolví esto en el automator ejecutando una acción de script de shell que genera otro script de shell que puede ejecutarse en una acción de AppleScript de la siguiente manera:

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

Un poco poco convencional, pero no son todos. Tengo la cerveza casera y el barril instalados. Pude desinstalar un .pkg con lo siguiente:

 brew cask uninstall --force <pkg_name>

ex. Desinstalación de barril de cerveza -Force DockerTools

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top