请教,mac osx 有木有类似 pkgbuild、用于卸载的工具

2014-03-06 11:09:17 +08:00
 micyng
因为卸载不只是删除文件,还有一些其他事情要做
所以就不要说让用户直接拖拽到垃圾箱这样的话了

谢谢
4106 次点击
所在节点    macOS
10 条回复
jakwings
2014-03-06 12:12:24 +08:00
直接拖拽到垃圾箱是比较安全的做法。安装软件时注意有没有说明卸载方法,记得据此分类放置安装文件。
我一般用 AppCleaner 寻找到所有个人配置文件,然后通过正常方式卸载程序,顺便提示系统卸载相关服务(AppCleaner 做不到),最后才用没关闭的 AppCleaner 删除找到的个人配置文件。

总之建议不明白那些卸载软件的原理不要优先使用那些软件来卸载软件,当心玩脱。
volCANo
2014-03-06 12:22:58 +08:00
@jakwings 什么叫“通过正常方式卸载程序”?还有“顺便提示系统卸载相关服务”这个是谁给提示?
jakwings
2014-03-06 12:37:21 +08:00
@volCANo 正常方式是指,按照应用安装包附带的卸载说明卸载,或者直接将应用拖到垃圾箱。

提示系统卸载相关服务,我猜测是应用本身已经附带了被拖动到回收站卸载时会取消服务的指令,或者系统根据应用的安装信息找到相关的服务并自动卸载。而 AppCleaner 这个软件只不过是强制删除文件,并不会通过垃圾桶来删除文件。
micyng
2014-03-06 13:27:23 +08:00
@jakwings ”提示系统卸载相关服务“是说拖拽垃圾箱这个动作可以被hook吗?
roamlog
2014-03-06 13:29:23 +08:00
hewigovens
2014-03-06 13:48:06 +08:00
@micyng clean my mac的做法是监听~/.Trash, 事后通知
jakwings
2014-03-06 13:50:35 +08:00
@micyng 见 3 楼。应用包的信息文件中好像是有指示相关服务文件的,垃圾箱可能会根据那个文件找到相关服务并卸载。我还没开发过应用,不清楚是不是程序利用了 hook 。
micyng
2014-03-06 14:15:25 +08:00
@hewigovens 是个好办法,可是mac连inotify之类的系统调用都木有,岂不是很蛋疼
hewigovens
2014-03-06 18:58:14 +08:00
@micyng 监控Trash至少有3种做法:

1. 创建一个launchd job, 具体看看 man launchd.plist并搜索WatchPaths
2. 使用FSEvent API
3. 直接open /dev/fsevents, 需要root权限
hewigovens
2014-03-06 18:59:16 +08:00
看到5楼的回复, 我也再贴下我之前造的轮子: https://github.com/hewigovens/PackageUninstaller

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/103064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX