作为对用户的服务,我想提供一个卸载脚本,以完全删除我在Mac OS X上的所有应用程序的所有跟踪。应用程序是使用软件包安装的,而不是仅仅将其拖动到应用程序文件夹中,因为它是守护程序型还需要在安装时运行脚本以启动的应用程序。

我的想法是包括一个叫做的文件 uninstall.sh 并将其放入 /Library/Application Support/com.<mycompany>.<myapplication>/ 并从应用程序文档中参考此。目的基本上是要停止守护程序,如果运行,卸载并删除相应的PLIST以及删除任何应用程序文件。这听起来合理还是有更好的方法可以实现这一目标?

我也想知道,还可以使用使用的习惯 pkgutil --forget - 如果我不这样做,下次安装软件包时,它显示为升级而不是安装。最佳实践信息的任何建议或指针吗?

在OS X上没有标准的方式吗?

有帮助吗?

解决方案

在OS X上没有标准的方式。是的,令人震惊,我知道。苹果公司一直警告所有人远离包装安装程序(除其他方面,通过为他们提供不足的文档)。然后,他们专门将软件包安装程序用于自己的独立应用程序。

是的,你应该包括 pkgutil --forget.

如果您的客户对这种脚本感到满意,那么您的方法听起来不错。如果他们想要“双击on-in-it”,那么您可能应该将卸载器放入 /Applications, ,但是如果可以的话,请避免。

如果您有GUI,状态项或偏好面板,那么最好在此处放置“卸载”按钮或菜单项,而不是要求它们与终端一起乱七八糟。

顺便说一句,如果您去寻找软件交付指南,那就过去了 移动 现在大约一年左右,他们“更新”它。

其他提示

无法删除软件包已经困扰着我多年了,所以我已经写了一个工具来卸载软件包:

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

它比Shell脚本要浮动的好一点,因为它确保永远不要删除任何其他已安装的软件包使用的文件

我也有类似的应用程序,并且遇到了同一问题。我采用的方法是我看到其他应用程序使用的方法。与其简单地分发.pkg安装程序,不如将其包装在.dmg文件中。卸载脚本可以包含在.dmg中的.pkg中。

然后,卸载脚本将重命名为“ Uninstall.Tool”。 .tool扩展程序允许用户通过双击来运行脚本,而不必从命令行运行它。

我解决的方式是使用 自动机, ,创建一个 应用 文档,然后添加对话框和脚本操作。最后保存您的Automator应用程序文档,您最终获得了一个简单的GUI应用程序来运行卸载。

通常,卸载操作需要管理员特权 - 我通过运行Shell脚本操作来生成另一个外壳脚本,然后通过在AppleScript操作中运行,如下所示:

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

有点非常规,但不是全部。我安装了自制和桶。我能够卸载.pkg的以下内容:

 brew cask uninstall --force <pkg_name>

前任。啤酒桶卸载-Force Dockertools

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top