作为对用户的服务,我想提供一个卸载脚本来完全删除我的应用程序在Mac上的所有痕迹。应用程序是使用包安装的,而不是仅仅被拖到应用程序文件夹中,因为它是一个守护程序类型的应用程序,在安装时也需要运行脚本才能启动。
我的想法是包括一个名为uninstall.sh的文件,并将其放入/Library/Application Support/com.<mycompany>.<myapplication>/中,并从应用程序文档中引用该文件。其目的基本上是在运行、卸载和删除相应的plist以及删除任何应用程序文件时停止守护进程。这听起来合理吗?还是有更好的方法来做到这一点?
另外,我想知道使用pkgutil --forget删除包的痕迹是否是好做法--如果我不这样做,下次安装软件包时,它会显示为升级而不是安装。对最佳实践信息有什么建议或建议吗?
在OS?上没有这样做的标准方法吗?
发布于 2011-09-09 00:25:31
在OS X上没有这样做的标准方法。是的,令人震惊,我知道。苹果公司一直警告大家远离软件包安装程序(包括为他们提供的文档不足)。然后,他们专为自己的独立应用程序使用软件包安装程序..。去想想吧。
是的,你应该包括pkgutil --forget。
如果您的客户对这种脚本很满意,那么您的方法听起来不错。如果他们想要“双击”,那么您可能应该将卸载程序放在/Applications中,但如果可以的话,可以避免这种情况。
如果您有一个GUI,状态项,或首选面板,那么最好在那里放置一个“卸载”按钮或菜单项,而不是要求他们乱搞终端。
顺便说一句,如果你去寻找软件交付指南,它已经是移动一年左右了,而他们“更新”它。
发布于 2013-07-02 12:33:36
由于无法删除软件包,多年来一直困扰着我,因此我编写了一个卸载软件包的工具:
http://www.corecode.at/uninstallpkg/index.html
这样做比shell脚本要好一些,因为它确保永远不会删除任何其他已安装包所使用的文件。
发布于 2012-05-24 12:36:08
我解决这个问题的方法是使用自动机,创建一个应用程序文档,然后添加对话框和脚本操作。最后,保存Automator应用程序文档,最后使用一个简单的GUI应用程序来运行卸载。
卸载操作通常需要管理员权限--我在Automator中通过运行一个shell脚本操作来解决这个问题,该操作生成另一个shell脚本,然后可以在applescript操作中运行,如下所示:
on run {input, parameters}
do shell script "/tmp/uninstaller.sh" with administrator privileges
return input
end runhttps://stackoverflow.com/questions/5312837
复制相似问题