Video of this issue:
The issue is when sequencing an application (100% reproducable on Epic and the VMWare Hypervisor) and then you add a large ‘update’ (for Epic this is the client pack) then not all registry keys are captured. Β At 8:20 seconds you can see keys that are present in the local registry are not present in the package.
Notice the “0”, “win32” and FLAGS keys are missing in the AppV package.
This is the script I used to compare the local registry vs the package:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
pushd #mkdir "$env:userprofile\desktop\Epic_Hyperspace_2014_8.1_RA1504_CP12_x86" New-AppvSequencerPackage -Name "Epic_Hyperspace_2014_8.1_RA1504_CP12_x86" -OutputPath "$env:userprofile\desktop" -FullLoad -Installer "AppV-2014_Hyperspace_Install.bat" #Extract registry hive cd "$env:userprofile\desktop" Add-Type -A 'System.IO.Compression.FileSystem' [IO.Compression.ZipFile]::ExtractToDirectory(''+$env:userprofile+'\desktop\Epic_Hyperspace_2014_8.1_RA1504_CP12_x86\Epic_Hyperspace_2014_8.1_RA1504_CP12_x86.appv', ''+$env:userprofile+'\Desktop\package') reg load HKLM\PE_REG "$env:userprofile\Desktop\package\Registry.dat" #compare Classes keys cd HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes $appvKeys = dir "SOFTWARE\Classes" | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt foreach ( $KeyPath in $appvKeys ) { $keyName = $KeyPath.PSChildName $PE_REGCount = (dir HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\$keyname).Count $compareKey = (dir HKLM:\SOFTWARE\Classes\$KeyName).Count # write-host $PE_REGCount $compareKey if (compare-object $PE_REGCount $compareKey) { $KeyName $keyName | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt } } ##compare TypeLibs cd HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\TypeLib $appvKeys = dir "SOFTWARE\Classes\TypeLib" | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt foreach ( $KeyPath in $appvKeys ) { $keyName = $KeyPath.PSChildName $PE_REGCount = (dir -recurse HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\TypeLib\$keyname).subkeyCount $compareKey = (dir -recurse HKLM:\SOFTWARE\Classes\TypeLib\$KeyName).subkeyCount # write-host $PE_REGCount $compareKey if (compare-object $PE_REGCount $compareKey) { #write-host $PE_REGCount " vs " $compareKey write-host $KeyName $keyName | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt } } ##compare Wow6432Node Classes cd HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID $appvKeys = dir "SOFTWARE\Classes\Wow6432Node\CLSID" | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt foreach ( $KeyPath in $appvKeys ) { $keyName = $KeyPath.PSChildName $PE_REGCount = (dir HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\$keyname).subkeyCount $compareKey = (dir HKLM:\SOFTWARE\Classes\Wow6432Node\CLSID\$KeyName).subkeyCount # write-host $PE_REGCount $compareKey if (compare-object $PE_REGCount $compareKey) { #write-host $PE_REGCount " vs " $compareKey write-host $KeyName $keyName | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt } } ##compare Wow6432Node Interface cd HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\Wow6432Node\Interface $appvKeys = dir "SOFTWARE\Classes\Wow6432Node\Interface" | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt foreach ( $KeyPath in $appvKeys ) { $keyName = $KeyPath.PSChildName $PE_REGCount = (dir -recurse HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\Wow6432Node\Interface\$keyname).subkeyCount $compareKey = (dir -recurse HKLM:\SOFTWARE\Classes\Wow6432Node\Interface\$KeyName).subkeyCount # write-host $PE_REGCount $compareKey if (compare-object $PE_REGCount $compareKey) { #write-host $PE_REGCount " vs " $compareKey write-host $KeyName $keyName | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt } } ##compare Interface cd HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\Interface $appvKeys = dir "SOFTWARE\Classes\Interface" | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt foreach ( $KeyPath in $appvKeys ) { $keyName = $KeyPath.PSChildName $PE_REGCount = (dir -recurse HKLM:\PE_REG\REGISTRY\MACHINE\SOFTWARE\Classes\Interface\$keyname).subkeyCount $compareKey = (dir -recurse HKLM:\SOFTWARE\Classes\Interface\$KeyName).subkeyCount # write-host $PE_REGCount $compareKey if (compare-object $PE_REGCount $compareKey) { #write-host $PE_REGCount " vs " $compareKey write-host $KeyName $keyName | out-file -append -noclobber $env:userprofile\Desktop\mismatched_registry_entry.txt } } reg unload HKLM\PE_REG |
What happens when you use the Custom Installation option instead of the Select installer to install option right before monitoring?
Same result. Not all registry keys are captured.
Same thing happens if you go through and manually install everything with the mouse. “Next Next Next” wait “Next Next Finish” etc. π
Pingback: AppV 5.1 Sequencer β Not capturing all registry keys – Update – Trentent Tye – Microsoft MVP