虚拟机里的 Windows 7,突然有了反常表现,具体地说,就是一启动 Windows Live Messenger 2011,Fusion 就会发生崩溃,整个虚拟机要需要重启。已经有几天没有登录 Messenger 了,这期间做过些什么操作,也无法一一回忆清楚,不过大致推断,有三种可能会导致此问题的出现。第一是 SkyDrive 客户端最近的静默升级。第二个是我最近曾经手动清理过系统里的一些无用的文件,现在不知道是否当初有过误操作,从而影响了 Messenger。第三则是,Fusion 自己从 5.0.1 升级到了 5.0.2。微软的产品路线是计划使用 Windows Live Essentials 2012 里面的 SkyDrive 替代 Windows Live Essentials 2011 里面的 Mesh 的,而我由于重度使用 Mesh,所以一直保留着 2011,没有安装 2012(据说 2012 的安装程序会很霸道地不经询问直接卸载掉 Mesh)。我的 SkyDrive 客户端则是单独安装的,从 Beta 开始到现在。
鉴于前述微软官方的思路和做法,我不由得对第一个原因疑虑重重。但深入探究这两个产品会不会有冲突,显然是一件非常消耗精力的事情,更何况现在并不能确定,所以选择了一个简单的方式来试验,那就是把 SkyDrive 整个功能关闭。结果表明,该崩溃还是会崩溃,所以暂时将之搁置。第二个怀疑的因素,也做了一些工作来考察。首先是我计划修复一下 Messenger,从控制面板里打开 Windows Live Essentials 2011 的安装程序才发现,要修复只能修复全部程序。看来也只好如此了,修复过程很顺利,可惜没有效果。于是我又想,不行把 Messenger 卸载了重新安装吧。卸载过程没问题,只是之后再次打开安装程序发现它并不能增加组件,叹。突然想到会不会不止是 Messenger 有问题呢?于是打开了一下 Mesh 界面,结果虚拟机又可耻地瘫痪了。这下无从验证了,只好开始验证第三个,也是我认为最不可能的 Fusion 的升级问题。然而结论却是出乎意料的,一向让我认为物有所值的 Fusion 竟然真的是出问题了,使用 5.0.1 版本的 Fusion 运行此虚拟机,则 Mesh 绝不会引发崩溃。
我第一时间决定要把我的 Messenger 安装回来。微软的官方网站很缺德,现在只提供最新的 Windows Live Essentials 2012 的安装包。搜索了一阵才找到 2011 完整的离线安装包。下载下来,启动安装程序,仅选中 Messenger,一路往下都很成功。运行 Messenger,很好,也没问题。不过等等,整个界面怎么成了英文的了?最先想到的是安装包下载错误,下载成了英文版的。于是又跑到那个有下载链接的页面上,看清楚了链接的文字:“简体中文”,又看清楚了 URL 里确实有 zh-cn 的字样,重新下载了一回。下载之后和刚刚使用的那个做了一下比较,二进制完全一致,再回想起安装的时候,安装界面其实也都是中文的来着。难道什么地方出了纰漏?我要再来一次。
这次遇到的——我的 Messenger 卸载不掉了……,好吧,那咱就上一出绝户计,把整个 Windows Live Essentials 2011 全部卸载!没想到更惨,一个也卸不掉!有点发懵,搜!在微软社区了找到了一个解决方案:手动运行带 /cleanup:all /q 参数的卸载程序 wlarp.exe。大获全胜。兴致勃勃地开展第二轮安装工作,把 Messenger、Mail、Mesh 等都勾选,安装再次顺利完成。运行之下,娘的,Mail 该中文确实还是中文,Messenger 该中文确实还是英文。我开始不淡定了,再搜!一搜之下,果有所获。我老人家使用 Live 套件这么多年,竟然不知道控制面板里有一个叫“Windows Live 语言设置”的程序。打开,赫然当然语言就是“简体中文”。咱来个曲线救国,先换成“英文”(它吭哧吭哧从网络上把英文资源下载了一通),再换回到“简体中文”(也吭哧了一会儿),仍然无效。真是形势逼人啊,我老人家要做外科手术了!
用 7z 把完整的安装包打开,提取出了其中的 PACKAGE 子目录里面的内容,待分析。可以看到,这个目录下都是一些以字母 P 开头后面有一串数字的文件,共 96 个,文件都没有扩展名。用十六进制编辑器随便打开一个文件查看,从文件头可以看出是个 cabinet 文件,遂全部把扩展名改成了 .cab。逐个查看之,发现有四个文件和 Messenger 有关:P36038289(该文件内仅有一个名为 messenger.7z 的文件);P36038290(该文件内仅有一个名为 d-Messenger.msp 的文件);P56200037(该文件内仅有一个名为 MessengerLang.7z 的文件);P56200038(该文件内仅有一个名为 d-MessengerLang.msp 的文件)。.7z 文件之内是同名的 .cab 文件,.cab 文件之内则是同名的 .msi 文件。对微软的系统安装器略有了解的朋友们都知道,.msi 是完整的安装包,.msp 则是修补包(patch)。
料都备齐了,需要定定神,想一下如何开工。首先要搞清楚 Windows Live Essentials 中的各个组件是如何支持多语言的。进入到 Program Files\Windows Live,先进入到可以正常显示中文的 Mail 应用的同名子目录中去,一眼就能看到两个子目录必然是和语言相关的,一个叫 en,一个叫 zh-cn。前一个想必是我们上面执行了切换英文语言的操作才导致出现的。到 Mesh 的目录中去,也能发现这两个目录,但是,进入到 Messenger 的目录里,却意外发现只有 en 而没有 zh-cn,en 之下有两个文件,msgslang.dll.mui 和 ShareAnythingControllang.dll.mui。症结一定在此!反过头检查我们从安装包里提取出来的东西,显然,文件名里带有 Lang 字样的是我们的目标(此处说来简单,其实我是都打开检查过的)。用 7z 打开 Messenger.msi,发现其中的两个文件,名字为 msgslangdllmui 和 shareanythingcontrollangdllmui(是不是眼熟?)。再打开 d-MessengerLang.msp,哦,不会吧,一眼没有看到预期的东西,不过貌似里面那个个头最大的名为 MessengerLang_RTM_15.4.3555.0308 的文件又很可疑。提取之,十六进制检查之,天哪,又是个 cab,改扩展名,打开,嗯,msgslangdllmui 和 shareanythingcontrollangdllmui 又出现了。既然后两个是在补丁包里,我们可以大胆推测,它们是在 msi 安装包里的同名文件的更新版本,经检查后也确认了这一点。因此,我们留取了 msp 中的文件而弃用了 msi 中的文件。
最后的操作是简单的,先把 msgslangdllmui 和 shareanythingcontrollangdllmui 里缺失的点号补上(为了保险起见,我还用 Visual Studio 以可执行文件的模式打开这两个文件,检查其字符串资源,不出所料,都是中文字串),进入到 Messenger 所在目录,建立 zh-cn 目录,把刚刚改名成功的 msgslang.dll.mui 和 ShareAnythingControllang.dll.mui 复制进来。启动 Messenger,哈哈,久违的中文界面回来了!!!
最后。为什么用简体中文的完整安装包重新单独安装 Messenger 组件会不建立中文资源,我还不是很清楚具体原因。我的推测是,安装脚本的编制人员也许在这儿遗漏了必要的步骤,而测试人员也并未测试出来。这些可能已经不重要了,毕竟最终我还是把中文找回了,而且,微软也要遗弃 Windows Live Messenger 了。也许上天安排我以这样的可以加深印象的形式开始与 Messenger 的告别之旅。再叹。
—— 记于网易博客
永久链接
今晚在网上闲逛时,突然想起了博主,原先在msn里的博客空间,几年前有一段时间会经常关顾下,欣赏欣赏博主的日常记叙,轻松淡雅的感觉。于是点开了一只保存在遨游里的收藏夹http://spaces.msn.com/members/sluttery/,没想到却打不开了,然后很自然地又在百度里搜了下“spaces.msn 珠穆朗玛”,没想到弹出来第一个就是了,因为看到“看前面 黑洞洞”,记忆犹新啊!博主果真笔耕不辍啊,俺深感佩服哦!
永久链接
得蒙故人来访,幸甚幸甚。近年来已经远不如之前之勤,blog 原本已流行渐远,加之微软又将 spaces 搞垮,一干好友各寻下处,都是诱因。只是一直认为好记性不如烂笔头,有些东西,写下来可能用得着。兄台闲来尽管多多盘桓。