最近由于由于给客户端下派office补丁导致大量客户计算机office组件无法正常使用,弹出某个文件定位的一个提示窗口,造成该问题的主要原因是由于office后续的核心组件或者关键组件更新时需要使用到源安装路径或者源安装光盘或者源安装缓存(MSOcache)。如果源路径不存在或者缓存丢失,就造成上述现象。
 
如何避免上述问题或者发生之后如何解决?
1.安装完office后,再最后完成的那一页不要选择删除“安装缓存”,安装缓存会存放在剩余空间最大的分区中,命名为MSOcache(隐藏文件)。如果保存了安装缓存将不会造成上述问题。
 
2.如果公司的客户端全部是做的ghost镜像并且没有保留缓存,那就只有使用组策略下派脚本来批量解决问题了。
解决思路:修改注册表中的office缓存文件定位路径。
 
office注册表路径:
HKEY_CLASSES_ROOT\Installer\Products\*
其中*为一个字符串值,例如
4080110900063D11C8EF10054038389C或9040110900063D11C8EF10054038389C
 
复制以下代码为OfficeSource.vbs,然后通过组策略下发。
 

  1. On Error Resume Next  
  2. Const HKEY_CLASSES_ROOT = &H80000000  
  3. strComputer = "." 
  4. strFilePath = "\\Filesrv\Software\Office\"  '定义office网络安装路径  
  5. Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")  
  6. strKeyPath = "Installer\Products" 
  7. oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrStrings  
  8.    
  9. '从注册表strKeyPath键值下查询产品Microsoft Office 2000 SR-1 Professional和Microsoft Office Professional Edition 2003并定位安装路径  
  10.    
  11. For i=0 To UBound(arrStrings)  
  12. strValueName = "ProductName" 
  13. strkeypath1 = "Installer\Products\" & arrStrings(i)  
  14. oReg.GetStringValue HKEY_CLASSES_ROOT, strkeypath1, strValueName, strValue1  
  15. If InStr(strValue1, "Microsoft Office 2000 SR-1 Professional") Then  
  16. strkeypath2 = strKeyPath1 
  17. strOffVer = "Office2000\" 
  18. strFullPath = strFilePath & strOffVer  
  19. strfile = "DATA1.MSI" 
  20. End If  
  21. If InStr(strValue1, "Microsoft Office Professional Edition 2003") Then  
  22. strkeypath2 = strKeyPath1 
  23. strOffVer = "Office2003\" 
  24. strFullPath = strFilePath & strOffVer  
  25. strfile = "PRO11.MSI" 
  26. End If  
  27. Next  
  28.    
  29. '根据不同语言定位安装路径,只包含简、繁、英、日四种。  
  30. strKeyPath3 = strKeyPath2 
  31. strValueName3 = "Language" 
  32. oReg.GetDWORDValue HKEY_CLASSES_ROOT,strKeyPath3,strValueName3,dwValue3  
  33. If dwValue3 = "2052" Then  
  34.  strLang = "CN\" 
  35.  strKeyPath4 = strKeyPath3 & "\" & "SourceList"  
  36.  strValueName4 = "LastUsedSource" 
  37.  strValue4 = "n;1;" & strFullPath & strLang  
  38.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath4,strValueName4,strValue4  
  39.  strKeyPath5 = strKeyPath3 & "\" & "SourceList"  
  40.  strValueName5 = "PackageName" 
  41.  strValue5 = strfile 
  42.  oReg.SetStringValue HKEY_CLASSES_ROOT,strKeyPath5,strValueName5,strValue5  
  43.  strKeyPath6 = strKeyPath3 & "\" & "SourceList"  & "\" & "Net"  
  44.  strValueName6 = "1" 
  45.  strValue6 = strFullPath & strLang  
  46.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath6,strValueName6,strValue6  
  47. Elseif dwValue3 = "1028" Then  
  48.  strLang = "TC\" 
  49.  strKeyPath4 = strKeyPath3 & "\" & "SourceList"  
  50.  strValueName4 = "LastUsedSource" 
  51.  strValue4 = "n;1;" & strFullPath & strLang  
  52.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath4,strValueName4,strValue4  
  53.  strKeyPath5 = strKeyPath3 & "\" & "SourceList"  
  54.  strValueName5 = "PackageName" 
  55.  strValue5 = strfile 
  56.  oReg.SetStringValue HKEY_CLASSES_ROOT,strKeyPath5,strValueName5,strValue5  
  57.  strKeyPath6 = strKeyPath3 & "\" & "SourceList"  & "\" & "Net"  
  58.  strValueName6 = "1" 
  59.  strValue6 = strFullPath & strLang  
  60.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath6,strValueName6,strValue6  
  61. Elseif dwValue3 = "1041" Then  
  62.  strLang = "JP\" 
  63.  strKeyPath4 = strKeyPath3 & "\" & "SourceList"  
  64.  strValueName4 = "LastUsedSource" 
  65.  strValue4 = "n;1;" & strFullPath & strLang  
  66.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath4,strValueName4,strValue4  
  67.  strKeyPath5 = strKeyPath3 & "\" & "SourceList"  
  68.  strValueName5 = "PackageName" 
  69.  strValue5 = strfile 
  70.  oReg.SetStringValue HKEY_CLASSES_ROOT,strKeyPath5,strValueName5,strValue5  
  71.  strKeyPath6 = strKeyPath3 & "\" & "SourceList"  & "\" & "Net"  
  72.  strValueName6 = "1" 
  73.  strValue6 = strFullPath & strLang  
  74.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath6,strValueName6,strValue6  
  75. Elseif dwValue3 = "1033" Then  
  76.  strLang = "EN\" 
  77.  strKeyPath4 = strKeyPath3 & "\" & "SourceList"  
  78.  strValueName4 = "LastUsedSource" 
  79.  strValue4 = "n;1;" & strFullPath & strLang  
  80.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath4,strValueName4,strValue4  
  81.  strKeyPath5 = strKeyPath3 & "\" & "SourceList"  
  82.  strValueName5 = "PackageName" 
  83.  strValue5 = strfile 
  84.  oReg.SetStringValue HKEY_CLASSES_ROOT,strKeyPath5,strValueName5,strValue5  
  85.  strKeyPath6 = strKeyPath3 & "\" & "SourceList"  & "\" & "Net"  
  86.  strValueName6 = "1" 
  87.  strValue6 = strFullPath & strLang  
  88.  oReg.SetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath6,strValueName6,strValue6  
  89. End If