office 2013补丁包更新
总是有客户发现使用office 2013 下的插件有问题,这个问题出现在低版本上,所以要给office 2013打上补丁,打上后,运行插件ok,出现的bug解决掉了。那么给office打补丁包就成了解决此类bug的方案。如何给office打补丁包呢?
360卫士可以扫描软件漏洞,然后在线下载并安装补丁包。这种方案固然好,但是有两个弊端。首先,客户机器上装360,客户不一定会修补漏洞,假如客户会操作,那么一次扫描,未必能够打完所有office 2013的补丁,有可能得多次扫描。然后,客户机器上没有360安全卫士,这时候,你不可能要求客户装360卫士。
在这种情况下,于是我就想到了,把补丁包下载下来,直接让客户装。问题是office 2013的补丁包着实很多,不可能在微软的网站上下载所有的,关键是太耗时间了。我想到用360安全卫士先扫描修补,看能不能直接拿到下载好的补丁包。结果发现360下的补丁包全部是cab格式的。这可能是补丁包安装后的副产品,我在360的补丁管理列表中,直接定位到了微软的下载页面上。后来,经过很长时间摸索,终于知道哪些补丁是很重要的补丁,把这几个关键的补丁打上就好了。在探索的过程中,曾几度陷入烦躁,沮丧当中。早知道,应该对探索充满信心,对结果有着乐观的态度,有助于问题及早解决。
找到补丁包了,接下来就是如何批量安装了。一个一个点击安装绝非良策。那客户怎么忍受呢。于是,我用了批处理+C#程序,简化了整个安装过程,客户只需要轻轻一点,安装补丁的程序就开始运行了:
1 private void btnOk_Click(object sender, RoutedEventArgs e) 2 { 3 //获取当前程序执行的目录 4 5 this.tipMessage.Text = "正在更新补丁,可能会花费几分钟。。。"; 6 7 ThreadPool.QueueUserWorkItem(delegate 8 { 9 string dir = Environment.CurrentDirectory; 10 Process proc = null; 11 try 12 { 13 string targetDir = string.Format(dir); 14 proc = new Process(); 15 proc.StartInfo.WorkingDirectory = targetDir; 16 proc.StartInfo.FileName = "updateOffice2013.bat"; 17 proc.Start(); 18 proc.WaitForExit(); 19 20 21 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 22 (ThreadStart)delegate() 23 { 24 this.tipMessage.Text = "更新完成"; 25 }); 26 } 27 catch (Exception ex) 28 { 29 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 30 (ThreadStart)delegate() 31 { 32 this.tipMessage.Text = "更新出错"; 33 }); 34 35 Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString()); 36 } 37 }); 38 }
用wpf写的小小的一段代码,关键的核心在于 updateOffice2013.bat 这个批处理文件,文件的内容很简单:
cd /d %~sdp0
for %%i in (*.exe) do %%i /q
第一句切换到批处理文件所在的目录,第二句循环执行exe文件 /q 参数表示静默安装,不要弹出对话框之类的东西。
最终安装目录结构如下:
注意:安装包是按版本顺序排序的,用户右键以管理员的权限运行 office2013Update.exe即可。