今天被 Windows Installer 搞死了。 事情是这样的。今天本来是要安装Office的补丁 KB905756,据说是修复 Excel 2003 漏洞的。下载补丁文件之后进行安装,片刻之后提示安装失败。我当时没怎么在意,因为正好在补丁站点上看到了安装失败的解决方式,就是进行一下Office 2003的自动修复,再重新进行安装。于是打开控制面板、添加删除程序,单击Office 2003选择修复,然后等待。片刻之后系统给出提示:
大意就是说,找不到补丁的文件,请确认该补丁是否存在。然后我又试图将Office2003 删除,结果得到了同样的提示,删除失败。我才意识到事情的严重性,估计所有的 Windows Installer 安装的程序都不能维护了吧。突然想起,前一阵子为了增加C盘剩余空间,曾经删除了C:\Windows\Installer 下面的全部文件。我知道这个目录下面保存的是Windows Installer的安装Cache,安装文件都以 xxxxxx.msi xxxxxx.msp (xxxxxx为16进制数字)的形式保存在这里,会不会是因为Cache被删除所以不能维护了呢?上网查了一下资料,在微软的资料库中找到一篇文章,里面大致提到了 %windir%/installer 下的内容被删除之后Windows Installer不能正常工作的问题。看来我的推断正确了。但是微软并没有给出解决方案。不过没关系,原因明白就一定能够解决的。 用 “%windir%/installer” google了一下,可惜没发现什么有价值的东西。但是却找到了这样的两句话:
通过策略键生成的日志文件将以msiXXXXX.log的格式存储在用户的”%temp%”文件夹中。 太棒了!如果能够看到Windows Installer的log就能够知道具体问题出在哪里。于是设置好调试选项,再次尝试修复Office,等到失败对话框出来之后,到 C:\Documents and Settings\
从这些描述大概可以看出,Windows Installer试图寻找一个名为3ea75f.msi的文件但是没找到,还有一个4ad14e.msp的文件也没找到。因为我知道Windows Installer肯定会去寻找Office的安装文件的,所以推测第一个 3ea75f.msi 应当是Office 2003的安装文件。但是根据手头的资料来看,%windir%\installer 下面保存的文件好像并不是原原本本的安装文件,而是安装文件展开之后形成的扩展名为 .msi .msp .mst 等文件。于是上网找朋友要过他的 %windir%\installer 下的文件准备复制。 但是很快我就发现行不通,因为3ea75f.msi文件在朋友的机器上根本不存在。猜测应该是文件名不同吧,没关系,选中.msi文件之后,下方的状态栏中会提示该文件是什么内容的。于是一个个地查看朋友给我的文件,当找到 1b67a3f.msi 时,状态栏提示该文件为 Microsoft Office Professional Edition 2003。就是它,于是将该文件复制到 %windir%/installer下面,改名为 3ea75f.msi,重新修复Office。这次仍然失败,但是 %log的内容中不再出现 3ea75f.msi 找不到的信息了。 下面要解决这些问题:
做了一些实验之后明白了这三行的意思。Windows Installer 试图寻找 4ad14e.msp但是没找到,于是去寻找该文件的原文件 MAINSP2ff.MSP,可是MAINSP2ff.MSP也没找到。所以导致了修复失败。那么只要找到 MAINSP2ff.MSP 文件并将其改成 4ad14e.msp 即可解决问题。继续到朋友给我的文件中去寻找,找到了这个:1b67c68.msp,标题是Office 2003 Patch;MAINSP2.accwiz.blnmgr.xl.fm20.fpcutl.fpdbrgn.fpeditax.fp.gdiplus.graph.imeint……好长。原来是Office 2003 SP2。将这个46M的文件复制到 %windir%\installer 下面改名为 4ad14e.msp,然后再次试图修复。这次的log变成了下面的样子:
这次就轻车熟路了,找到标题为 Office 2003 Patch;OtkLoadr;6572;FullFile;ALL的文件,扔进 %windir%/installer 改名为 136a2c.msp。再次修复,log文件变成:
好,标题为Office 2003 Patch;outlfltr;6526;FullFile;ALL的文件改成3e7d07.msp扔进去。再次修复,熟悉的Office 2003 安装对话框终于出现了。修复之后 Excel的那个补丁也成功安装。 总结一下教训:这次的事故原因就是删除了%windir%/installer下面的文件。该目录下保存的是安装文件的备份,软件安装多了,这里的备份会有数百兆,着实令人不爽。但是贸然删除就会造成今天我遇到的问题。所以最好的方法还是将该目录下的内容移动到其他地方,等到要安装补丁或者删除软件时再临时移动回来,这样既能保证不出问题,也能在 C盘清理出足够的空间来。 最后别忘了关闭Windows Installer的调试选项,因为一次正常安装的log会达到1xM之多 …… |