普通的安装过程无非是复制文件和适当配置,无他。下面直奔主题:
WPS_For_Mac_Alpha_1.2.3(321).pkg 是以分发包的格式封装的,利用 macOS 自带的安装器(Installer)进行安装。除了 Installer 提供的基本步骤外,没有使用其它复杂技术进行特殊的定制。 主要需要说明的是下面两个部分:
<bundle CFBundleShortVersionString="1.2.3" CFBundleVersion="321" id="cn.wps.presentation" path="wpp.app"/>
<bundle CFBundleShortVersionString="1.2.3" CFBundleVersion="321" id="cn.wps.spreadsheets" path="et.app"/>
<bundle CFBundleShortVersionString="1.2.3" CFBundleVersion="321" id="cn.wps.writer" path="wps.app"/>
<choice id="cn.wps.writer" visible="false">
<pkg-ref id="cn.wps.writer">
<must-close>
<app id="cn.wps.writer"/>
<app id="cn.wps.presentation"/>
<app id="cn.wps.spreadsheets"/>
</must-close>
</pkg-ref>
</choice>
真正的程序文件都在组件包(wpsoffice.pkg)中,负载很简单只有三个程序:et.app, wpp.app 和 wps.app 装前脚本很简单,就是杀掉了 wpscloudsvr 进程。而最关键的要说是装后脚本了,这个也是重点,几乎所有的 pkg 包都会在装后脚本中做文章,WPS 也不例外。
这里只挑关键的行分析。
第四行:定义了全局的 kingsoft_path="$target_volume/Library/Application Support/Kingsoft"
目前可以猜测,它要在你的机器的"/Library/Application Support"
目录中使用一个 Kingsoft
的子目录 /文件。
接下来他定义了一个 focus_remove_folder()
函数,从名字就知道它干什么用的。
第二个函数:decompress_office6()
:它利用 wps.app 中自带的一个 7za 命令来将储存在 wps.app 中 Frameworks 中的 office6.7z 压缩文件解压到该 Frameworks 中,然后删除了 7za 和 office6.7z. 这个看上去没有任何问题。
第三个函数:redirect_app_office6()
:传入参数 app 的绝对路径。将传入的 app 中的多个软连接: Frameworks/office6,Resources/office6,PlugIns
,的软连接重新定义到前面定义的全局 "$kingsoft_path"
中的 office6。
并使用循环遍历该 app 中 SharedSupport 目录中的所有的 app,递归调用 redirect_app_office6()
函数。
第四个函数:redirect_office6()
:就是将 et.app, wpp.app 和 wps.app 作为参数一次调用 redirect_app_office6()函数
接下来就是脚本的主体部分, 解压 office6, 创建 "$kingsoft_path" 目录,并将 wps.app 中的 office6 和 Plugins 目录移动到 "$kingsoft_path" 目录中。再讲 office6 重新连接到 Plugins 中。
后来是一个循环:
for lang in `ls "Library/Application Support/Kingsoft/WPS Cloud Files/userdata"`
do
for filename in `ls "Library/Application Support/Kingsoft/WPS Cloud Files/userdata/${lang}"`
do
if [ ${filename} != "config.ini" ]; then
focus_remove_folder "Library/Application Support/Kingsoft/WPS Cloud Files/userdata/${lang}/${filename}"
fi
done
done
这里有一个 bug(两处),不太严重。大家可以看出,这个路径错了,在装后脚本目录中怎么会有 "Library/Application Support/Kingsoft..."
目录呢,即使有,对它操作也没用,毕竟安装完了 Installer 负责删除安装所有临时数据。看他的意思应该是安装目标卷的 Library 目录,所以应该加上 ”$target_volume/“
。 这是个小失误,是个没用功,美中不足。
脚本的最后它还创建了一个 "Library/Application Support/wps_newly_install"
文件,内容也是 wps_newly_install。应该是每个 app 初次运行时会寻找这个文件,并做初始化。
至此完全解读了它的安装过程。其实它的主要的过程和目的就是为了节省安装包和 app 的空间,将共享程序和数据都存放在了系统的 "/Library/Application Support/Kingsoft ” 目录中,这个就如同网上流行的给 M$ Office for Mac 瘦身的思路是一样的。
不过,就现在的网络速度和存储,没有必要这样做,直接放在每个 app 中就好,做成 DMG 格式的拖拽分发也是不错的选择,可以打消好多人的疑虑不是。至于如何分辨是否第一次运行,有很多其它方法不是。
还可以看出,它的第一个发布版本很可能不会使用沙盒技术。从诸多方面来看,它离上线 App Store 还有一段路要走,也说不定他们不想上吧。
从上面的分析可以看出,如果只是安装还没有运行,那么完全删除它很简单, 就一行命令:
rm -fr /Applications/et.app /Applications/wpp.app /Applications/wps.app "/Library/Application Support/Kingsoft"
如果有洁癖的最多加一句:
pkgutil --forget "cn.wps.writer"
仔细看了一下,分析装后脚本的最后一行的
"Library/Application Support/wps_newly_install"
不是我的抄录问题,原脚本就是这么写的,于是,这又是一个与上面犯相同错误的bug,至于这个bug是否致命,就要看wps.app等程序是如何判断初次安装的吧。
1
ftu 2018-07-12 13:17:31 +08:00
总结:这玩意儿目前 没有坑,探测完毕
|
2
stanjia 2018-07-12 13:23:32 +08:00
Mac 上安软件不是拖动到目录里就可以了吗?
|
3
TonyLiu2ca OP |
4
TonyLiu2ca OP 改不了了,最后删除应该是:
sudo rm -fr .... |
5
chengxiao 2018-07-12 14:36:54 +08:00
想想挺悲哀的 本来 wps 出个 mac 版是好事
然后大家先是本着对他的好恶批判一番 然后又怕他流氓 再审一遍代码.... 这公司之前是做了多少恶? |
6
nutting 2018-07-12 14:41:25 +08:00
求问可以强行更改版本需求么,我是 10.11 用不了
|
7
Bardon 2018-07-12 14:42:39 +08:00
忽然有个疑问,为什么你们都用 rm -fr,而我用 rm -rf
|
10
Aruforce 2018-07-12 16:48:22 +08:00
@chengxiao 你用过 windows 版 就知道 wps 有多流氓了。。。尤其是什么 qing 什么乱七八糟。。。
|
11
liuzelei 2018-07-12 17:05:16 +08:00
focus_remove_folder 是什么鬼? force_remove_folder?
|
13
wd 2018-07-12 17:26:21 +08:00 via iPhone
wpscloudsrv 是什么?
|
14
TonyLiu2ca OP @nutting
如果说只是安装的话,可以改。至于能否运行就不知道了,需要测试先。 |
15
TonyLiu2ca OP @Bardon
这两个谁在前谁在后,fr 说的是:必须全部; rf:全部, 必须的。听上去,rf 是东北口音,fr 是领导口吻。;) |
16
TonyLiu2ca OP @liuzelei
难道说它原文 copy 时被改了?回家再看看 |
17
TonyLiu2ca OP @wd
这个有待查证 |
18
TonyLiu2ca OP @chengxiao
这不是前几天有个帖子吗,说怎怎么的,还有人一看是 pkg 的要求管理员身份安装就弃锅了。 那就先从安装 pkg 开始看看呗,让大家放心安装。 当然运行后也会生成各种 plist/缓存等等用户客户化的东西,要想搞清楚还需要进一步分析 |
20
TonyLiu2ca OP @liuzelei
focus 不是我粘贴的问题,是原作者的创作 |
21
xratzh 2018-07-13 14:24:22 +08:00 via Android
我用的国际版加上中文包
|
22
chenjau 2018-07-13 23:37:37 +08:00 via Android
就算今天不流氓,明天也要流氓。也没必要用,这公司这产品,劣迹斑斑,还信它那脑子有问题。wps 是刚需吗?有商业的 msoffice,有免费原生的 iwork,有开源的 libre,为什么就非得投这种坑?
|