For all the buzz around win32calc - and the need of offline custom updates. You are a known guru of HKLM\Software\Microsoft\Windows\Current Version\Component Based Servicing\.... What do I need to remove from PackageDetect (and do I need to uninstall win32calc package after conversion to entS) - so that SFC doesn't check this package - and standard updates apply. I bet it's just few strings REG file. And weeks of menhours to explore if you don't give a hint
That's not interesting ) 1) I don't use LTSC and don't use Win10 anymore 2) The how to modify [Packages] and [PackageDetect] is way more usefull. I still am not able to understand, what you conversion script does to CBS when you create Full-UI Hyper-V Server 2019, - and updates are installed online, without reverting to Core as in my case. And I want not just understand, but repeat that on AzureStackHCICor 2022. Now I am honest, why I asked Screw the calculator!
I'm not a guru. More of a punter. I successfully uninstalled win32calc package after conversion to entS in the Windows 10 Enterprise IoT vNext Reconstruction Project (SPP project). I tried it offline straight after EntS creation and also online. Nothing I did made any difference. I agree, we must Of couse, updating IoT vNext 19043 using easily obtained baseless psf/cab pairs works great! So is there a problem? ***You can "play" yourself. Maybe you'll figure out something new?? If you only install @Horwatt 's calc cabs, then calculator files are only in the WinSxS image folder. This makes image clean-up simplier. To clean WinSxS requires elevated privlidges. I use @BAU 's script. This is only "step one." Step two is, as you say, mess with the registry. I did try deleting from the registry all evidence of there ever having been a legacy calculator, but that's a bit brutal and didn't solve the non-baseless update issue. Spoiler: Calc hive Delete Code: REG Delete "HKLM\SOFTWARE\Classes\calculator" /f >NUL REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Calculator/Debug" /f >NUL REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Calculator/Diagnostic" /f >NUL REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{75f48521-4131-4ac3-9887-65473224fcb2}" /f >NUL ::needs elevation REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\InboxApp" /v "56230F2FD0CC3EB4_Calculator_lnk_amd64.lnk" /f >NUL REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\WindowsFeatureCategories" /v "COMMONSTART/Programs/Accessories/Calculator.lnk" /f >NUL REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Management\WindowsFeatureCategories" /v "COMMONSTART/Programs/Accessories/Calculator.lnk"" /f >NUL REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Applets\Calculator\Capabilities" /v "ApplicationName" /t REG_EXPAND_SZ /d "%SystemRoot%\System32\win32calc.exe" /f >NUL REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Applets\Calculator\Capabilities" /v "ApplicationDescription" /t REG_EXPAND_SZ /d "%SystemRoot%\System32\win32calc.exe,-217" /f >NUL REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Applets\Calculator\Capabilities\URLAssociations" /v "calculator" /t REG_SZ /d "calculator" /f >NUL BAU elevated offline mounted Remove-Package and delete actual apps and mui.cmd Code: @ECHO OFF CHCP 437 >NUL COLOR 1F :: [info] to integrate in .bat files, add this line before main code then RunAsTI snippet on bottom whoami|findstr /i /c:"nt authority\system" >nul || ( call :RunAsTI "%~f0" %* & exit/b ) pushd "%~dp0" DISM /LogLevel:1 /logpath:logs\RemoveCalc-FeaturePack.log /image:mount /Remove-Package /PackageName:Microsoft-Windows-win32calc-Package~31bf3856ad364e35~amd64~~10.0.19041.1 DISM /LogLevel:1 /logpath:logs\RemoveCalcLanguagePack.log /image:mount /Remove-Package /PackageName:Microsoft-Windows-win32calc-Package~31bf3856ad364e35~amd64~en-US~10.0.19041.1 :: === @@ Delete calculator @@ === :: ECHO Delete Win32Calc straggler files ECHO: ::==== x64 - WinSxS - ===== rmdir /q /s mount\Windows\WinSxS\amd64_microsoft-windows-win32calc_31bf3856ad364e35_10.0.17763.1_none_3a7509176fdfd06a >NUL 2>&1 ::==== x86 - WinSxS - ===== rmdir /q /s mount\Windows\WinSxS\wow64_microsoft-windows-win32calc_31bf3856ad364e35_10.0.17763.1_none_44c9b369a4409265 >NUL 2>&1 ECHO: ECHO Done ECHO: PAUSE popd ::exit #:RunAsTI: #1 snippet to run as TI/System, with /high priority, /priv ownership, explorer and HKCU load set ^ #=& set "0=%~f0"& set 1=%*& powershell -nop -c iex(([io.file]::ReadAllText($env:0)-split':RunAsTI\:.*')[1])& exit/b $_CAN_PASTE_DIRECTLY_IN_POWERSHELL='^,^'; function RunAsTI ($cmd) { $id='RunAsTI'; $sid=((whoami /user)-split' ')[-1]; $code=@' $ti=(whoami /groups)-like"*1-16-16384*"; $DM=[AppDomain]::CurrentDomain."DefineDynamicAss`embly"(1,1)."DefineDynamicMod`ule"(1) $D=@(); 0..5|% {$D+=$DM."DefineT`ype"("M$_",1179913,[ValueType])}; $I=[int32];$P=$I.module.gettype("System.Int`Ptr"); $U=[uintptr] $D+=$U; 4..6|% {$D+=$D[$_]."MakeB`yRefType"()};$M=$I.module.gettype("System.Runtime.Interop`Services.Mar`shal");$Z=[uintptr]::size $S=[string]; $F="kernel","advapi","advapi",($S,$S,$I,$I,$I,$I,$I,$S,$D[7],$D[8]),($U,$S,$I,$I,$D[9]),($U,$S,$I,$I,[byte[]],$I) 0..2|% {$9=$D[0]."DefinePInvokeMeth`od"(("CreateProcess","RegOpenKeyEx","RegSetValueEx")[$_],$F[$_]+'32',8214,1,$S,$F[$_+3],1,4)} $DF=0,($P,$I,$P),($I,$I,$I,$I,$P,$D[1]),($I,$S,$S,$S,$I,$I,$I,$I,$I,$I,$I,$I,[int16],[int16],$P,$P,$P,$P),($D[3],$P),($P,$P,$I,$I) 1..5|% {$k=$_;$n=1;$AveYo=1; $DF[$_]|% {$9=$D[$k]."DefineFie`ld"('f'+$n++,$_,6)}}; $T=@(); 0..5|% {$T+=$D[$_]."CreateT`ype"()} 0..5|% {nv "A$_" ([Activator]::CreateInstance($T[$_])) -force}; function F ($1,$2) {$T[0]."GetMeth`od"($1).invoke(0,$2)}; if (!$ti) { $g=0; "TrustedInstaller","lsass"|% {if (!$g) {net1 start $_ 2>&1 >$null; $g=@(get-process -name $_ -ea 0|% {$_})[0]}} function M($1,$2,$3){$M."GetMeth`od"($1,[type[]]$2).invoke(0,$3)}; $H=@(); $Z,(4*$Z+16)|% {$H+=M "AllocHG`lobal" $I $_}; M "WriteInt`Ptr" ($P,$P) ($H[0],$g.Handle); $A1.f1=131072;$A1.f2=$Z;$A1.f3=$H[0];$A2.f1=1;$A2.f2=1;$A2.f3=1;$A2.f4=1;$A2.f6=$A1 $A3.f1=10*$Z+32;$A4.f1=$A3;$A4.f2=$H[1]; M "StructureTo`Ptr" ($D[2],$P,[boolean]) (($A2 -as $D[2]),$A4.f2,$false); $w=0x0E080600 $out=@($null,"powershell -win 1 -nop -c iex `$env:A",0,0,0,$w,0,$null,($A4 -as $T[4]),($A5 -as $T[5])); F "CreateProcess" $out } else { $env:A=''; $PRIV=[uri].module.gettype("System.Diagnostics.Process")."GetMeth`ods"(42) |? {$_.Name -eq "SetPrivilege"} "SeSecurityPrivilege","SeTakeOwnershipPrivilege","SeBackupPrivilege","SeRestorePrivilege" |% {$PRIV.Invoke(0, @("$_",2))} $HKU=[uintptr][uint32]2147483651; $LNK=$HKU; $reg=@($HKU,"S-1-5-18",8,2,($LNK -as $D[9])); F "RegOpenKeyEx" $reg; $LNK=$reg[4] function SYM($1,$2){$b=[Text.Encoding]::Unicode.GetBytes("\Registry\User\$1");@($2,"SymbolicLinkValue",0,6,[byte[]]$b,$b.Length)} F "RegSetValueEx" (SYM $(($key-split'\\')[1]) $LNK); $EXP="HKLM:\Software\Classes\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}" $r="explorer"; if (!$cmd) {$cmd='C:\'}; $dir=test-path -lit ((($cmd -split '^("[^"]+")|^([^\s]+)') -ne'')[0].trim('"')) -type 1 if (!$dir) {$r="start `"$id`" /high /w"}; sp $EXP RunAs '' -force; start cmd -args ("/q/x/d/r title $id && $r",$cmd) -wait -win 1 do {sleep 7} while ((gwmi win32_process -filter 'name="explorer.exe"'|? {$_.getownersid().sid -eq "S-1-5-18"})) F "RegSetValueEx" (SYM ".Default" $LNK); sp $EXP RunAs "Interactive User" -force } # lean and mean snippet by AveYo, 2018-2021 '@; $key="Registry::HKEY_USERS\$sid\Volatile Environment"; $a1="`$id='$id';`$key='$key';";$a2="`$cmd='$($cmd-replace"'","''")';`n" sp $key $id $($a1,$a2,$code) -type 7 -force; $arg="$a1 `$env:A=(gi `$key).getvalue(`$id)-join'';rp `$key `$id -force; iex `$env:A" $_PRESS_ENTER='^,^'; start powershell -args "-win 1 -nop -c $arg" -verb runas }; <#,#> RunAsTI $env:1; #:RunAsTI:
Which I've been saying for a long time. Using .1 builds as a base can be a two edged sword, at least when it comes to migration. dism is simply not doing the addpackage job right at all times. When certain packages have not undergo some intermediary steps, stuff breaks, and instead of a quick 15 minutes at most install / repair, you get whooping hour - when it works. because it fails often and keeps retrying. check the logs.. it's mostly gibberish, but some version numbers do stand out. There's no script to blame but microsoft - they're the ones making a joke of these LCU's. it's simply not acceptable for some of these to have upwards of 60% failure rate at times. And now they simply gave up, and started limiting updates even more, to a certain SSU (a support package to fix what was broken in the previous LCUs). And they freaking managed to break cab limits and now use different format - what a joke. Just f**kin get back to reliable, compartmentalized updates, not these oversized SP sized monthly crap to shovel bloat together with actual security updates down people's PC's throats. It's been many versions already since I've stopped with the latest LCU integration craziness, and just make use of the base - the latest base esd. I find it more reliable overall, both on clean installs and on repairs. Downloading another LCU is gonna happen anyway, so why bother. Instead, it's a test if the configuration is ok.
And what to do with branches where no .1 exist? Like ServerTurbineCor2019? I have a working 17784.1466 build, which today installed the .1950 LCU (not PSFX) without any questions.
As of 17763 - detecting package and update. -------------------------------------------------------------------------------- From 18362 onwards - installing new mum file, and detect and update by the new mum. Different Update Technology, can not compare. (even though latest 17763 LCU uses PSFX format.) i.e. Update Technology and PSFX format of LCU are NOT the same things.
I am not interested in any LTSC or G, as they are boring I'd love to discuss Server IoT, or Essentials 2022 (have a key, afraid to use it) I don't even speak of.. you know which SKU )) Actually both cheapest and dumbest client & server SKUs are what I am interested in long dialogs And am very interested in possibility of creating a NanoServer VM (2019, 1904x, 20348, 22xxx). Hyper-V of course as that seems easier and more reasonable (yeas, am Hyper-V freak) Not in 5am however )) P.S. And let me say a word in my excuse - I don't ask for direct answer - build, script or instruction - I usually ask to share experience - if you tried that (and you sure did) - was it success or failure. Is there any value of other tries with less skilled hands. That is what can't be measured. Ability not to spend lot of time for nothing. That is how I try to formulate my questions.
Btw, by your link after a month I finally downloaded 10.0.19041.1.vb_release.191206-1406_amd64fre_client-multisku_retail_en-us-CCCOMA_X64FRE_EN-US_DV9 10.0.19041.1.vb_release.191206-1406_amd64fre_client-multisku_volume_en-us-CPBA_X64FRE_EN-US_DV9.iso 10.0.19041.1.vb_release.191206-1406_amd64fre_client-server-multisku_retail_en-us-CCOMA_X64FRE_EN-US_DV9.iso with all 19041.1 editions. No Starter All updates by simple LCU. And who called last one client-server was a strange person. Nothing of server.
You really mean that mum files are checked with each LCU install? Not just their names in registry? I wanted to say that if I remove some vital part about win32calc from ComponentBasedServicing, it won't be detected as "requires update", and that specific MUM won't be read - no SFC error, LCU success...
I notices some mismatches - missing Wrapper or wrong edition XML in \Windows But very good homebrews for - when were they created?
Sessions.xml Code: <Session version="8.0" id="2480_5215828" client="Cbss" options="0" currentPhase="1" lastSuccessfulState="Complete" pendingFollower="false" retry="false" operationCovered="1025" correlationVector="mNUdkLVnyUWMs8cy.0" Queued="2019/12/07/09:03:45" Started="2019/12/07/09:03:45" Complete="2019/12/07/09:18:18" status="0x0"> And in ComponentBasedServicing.