Skip to content

Instantly share code, notes, and snippets.

@yon2004
Last active July 11, 2017 00:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yon2004/1a33ec690e85c0bdcf6ed1ffcbeae658 to your computer and use it in GitHub Desktop.
Save yon2004/1a33ec690e85c0bdcf6ed1ffcbeae658 to your computer and use it in GitHub Desktop.
' ScriptCryptor Project Options Begin
' HasVersionInfo: No
' Companyname:
' Productname:
' Filedescription:
' Copyrights:
' Trademarks:
' Originalname:
' Comments:
' Productversion: 0. 0. 0. 0
' Fileversion: 0. 0. 0. 0
' Internalname:
' Appicon:
' AdministratorManifest: No
' ScriptCryptor Project Options End
Dim oMsi,oFso,oWShell
Dim Patches,SumInfo
Dim patch,record,msp
Dim qView
Dim sTargetFolder,sMessage
Const OFFICEID = "000-0000000FF1CE}"
Const PRODUCTCODE_EMPTY = ""
Const MACHINESID = ""
Const MSIINSTALLCONTEXT_MACHINE = 4
Const MSIPATCHSTATE_APPLIED = 1
Const MSIOPENDATABASEMODE_PATCHFILE = 32
Const PID_SUBJECT = 3 'Displayname
Const PID_TEMPLATES = 7 'PatchTargets
Set oMsi = CreateObject("WindowsInstaller.Installer")
Set oFso = CreateObject("Scripting.FileSystemObject")
Set oWShell = CreateObject("Wscript.Shell")
'Create the target folder
sTargetFolder = oWShell.ExpandEnvironmentStrings("C:\")&"Office2013Updates"
If Not oFso.FolderExists(sTargetFolder) Then oFso.CreateFolder sTargetFolder
sMessage = "Patches are being copied to the C:\Office2013Updates folder." & vbCrLf & "A Windows Explorer window will open after the script has completed."
oWShell.Popup sMessage,20,"Office Updates Capture - www.techygeekshome.co.uk"
'Get all applied patches
Set Patches = oMsi.PatchesEx(PRODUCTCODE_EMPTY,MACHINESID,MSIINSTALLCONTEXT_MACHINE,MSIPATCHSTATE_APPLIED)
On Error Resume Next
'Enum the patches
num = 0
For Each patch in Patches
If Not Err = 0 Then Err.Clear
'Connect to the patch file
Set msp = oMsi.OpenDatabase(patch.PatchProperty("LocalPackage"),MSIOPENDATABASEMODE_PATCHFILE)
Set SumInfo = msp.SummaryInformation
If Err = 0 Then
If InStr(SumInfo.Property(PID_TEMPLATES),OFFICEID)>0 Then
'Get the original patch name
Set qView = msp.OpenView("SELECT `Property`,`Value` FROM MsiPatchMetadata WHERE `Property`='StdPackageName'")
qView.Execute : Set record = qView.Fetch()
'Copy and rename the patch to the original file name
oFso.CopyFile patch.PatchProperty("LocalPackage"),sTargetFolder&"\"&num&"-"&record.StringData(2),TRUE
End If
End If 'Err = 0
num = num + 1
Next 'patch
oWShell.Run "explorer /e,"&chr(34)&sTargetFolder&chr(34)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment