Working Reclaimable Packages Mystery

For months now, one of my test PCs has claimed something remarkable. It’s a Lenovo ThinkPad X380 Yoga (8th-gen i7, 16 GB RAM, 1 TB NVMe SSD). It’s a working reclaimable packages mystery, as you can see in the lead-in graphic. Note please: it shows 13 (!) reclaimable packages in the component store. But they never go away…

Why Is There a Working Reclaimable Packages Mystery?

Gosh, I wish I knew. But it’s got me learning more about DISM and the Windows Component Store (WinSxS) than I’ve known before. In particular, I’ve been digging into DISM’s /Get-Packages capability, to look into the contents of WinSxS to see what is — and apparently isn’t — going on in there.

Reading about the output of the /format:table directive, I see that the state column can produce a range of values. These include the following, as mined from Learn.Microsoft.Com by Copilot (quoted verbatim):

  • NotPresent: The package is not present in the image. It has not been installed or added to the image.

  • UninstallPending: The package has been marked for uninstallation, but the process is not complete. There are some additional steps that need to be performed before the package is fully removed from the image.

  • Staged: The package has been added to the image, but it is not active. It can be activated by using the /Enable-Feature option.

  • Removed: The package has been removed from the image, but some metadata about it remains. This allows the package to be reinstalled if needed.

  • Installed: The package is installed and active in the image. It can be deactivated by using the /Disable-Feature option.

  • InstallPending: The package has been marked for installation, but the process is not complete. There are some additional steps that need to be performed before the package is fully installed and activated in the image.

  • Superseded: The package has been replaced by a newer version of the same package or a different package that provides the same functionality. The superseded package is still present in the image, but it is not active.

  • PartiallyInstalled: The package has been partially installed in the image, but some components or files are missing or corrupted. This may cause errors or malfunctions in the package or its dependencies.

Digging Deeper Into the Mystery…

As I understand it, the dism /online /cleanup-image /startcomponentcleanup command will remove at least some of the packages in the “Superseded” state from the WinSxS. So I fired up the following command to look into the component store on another test machine. It reports 4 reclaimable packages via DISM, and inspection of the /format:tables output from that PC via Notepad++ reports 106 instances of the term “Superseded” in that text file.

Next, I run the afore-cited “cleanup” command. This takes a few minutes to complete. When I run /analyzecomponentstore again, the number of reclaimable packages is zero (0). So I generate new /format:table output, and open it in Notepad++ again. This time, a search on “Superseded” produces 0 hits. My theory is that the cleanup flushes these items out of the WinSxS, and this data seems to confirm that.

And Now, Back to the X380 Yoga

Here’s where things get interesting. Even though /analyzecomponentstore is reporting 13 reclaimable packages, the /format:table output from that PC includes no instances of “Superseded” in its contents. Somehow, DISM is seeing something that I can’t see via this lens into the WinSxS contents. Therein lies the mystery.

I’ll keep digging and see what else I can learn. Stay tuned! This could get interesting — at least if you, like me, find this kind of thing engaging.

Facebooklinkedin
Facebooklinkedin

Mouse Goes AWOL: Panic Ensues

I have to laugh — and mostly at myself. I confess: I was playing MS Solitaire this morning when my mouse quit working. It was a timed event so I wanted to get back at it ASAP. Because of that as my mouse goes AWOL, panic ensues as I try to get it working again. Long story short: I keep a backup, replacement mouse around just for occasions like these. It’s now in place, doing the job of the old one. Time to order another pair of replacements!

When Goes AWOL Panic Ensues Because of Timing

The lead-in graphic shows a picture from Amazon of my likely replacement mouse. It’s a Microsoft Mobile Mouse 4000, instead of the 3500 model that just quit working. They cost the same, so I figure why not get a newer model if I can at no extra charge? My only problem right now is that the best price is for delivery from China (!): $19.95 vs. $28.95 from US outlets, including the MS Store itself.

Let me be clear about one thing, too: I don’t blame MS for my mouse fail. Meese are consumables and I use them enough that I wear one out every 18-24 months or so. This comes as no surprise — except for today’s timing — and is a cost of doing business for me. Indeed, that’s why I always order them in pairs rather than singletons. I know it’s just a matter of time before another one drops out of service. My wife’s and son’s desktops also have external wireless meese, too. One or more of those will probably crap out before 2023 is over.

The Proper Stocking of Spare Parts

So, here’s a short list of the spares I keep around the house knowing that I’m going to need them sometime (preferably later, rather than sooner):

  • Mice, both wireless and wired (mostly MS wireless, but also Logitech Bluetooth and Unifying Receiver models)
  • Keyboards: mostly MS Comfort Curve 4000s, but a couple of Logitech wireless models, and a couple of wired el-cheapo chiclet types
  • GbE switches: I like the NetGear unmanaged 8-port models, but I also have 5-port and an 8-port models (house brand from Fry’s).
  • Cables of all kinds: RJ-45 Ethernet in lengths from 6″ to 100ft, USB: 2.0 and 3.0 (Type A), USB-C 3.1-2, Thunderbolt 3 and 4, plus other miscellany; and video cables including HDMI 1-3 and DisplayPort 1.2-1.4 (also in various lengths and models).

This lets me deal quickly with predictable troubles as they happen. And when they do, I always order replacements plus at least one extra as things happen. That way, I’m already prepared for next time.

Facebooklinkedin
Facebooklinkedin

Appreciating Microsoft’s Update Ecosystem

As part of my daily Windows routine, I run the winget package manager to keep most of my applications up-to-date. Occasionally, I’ll also check in on the MS Store to see what it’s been finding and updating on its own. As the spirit moves me, I sometimes click the “Get updates” button to spur its actions along. I find myself appreciating Microsoft’s update ecosystem more and more (yes, even WU) as I work with it constantly. Let me explain…

Why I’m Appreciating Microsoft’s Update Ecosystem

The lead-in graphic shows an artfully arranged update view of MS Store’s Library tab, with three items “modified momens ago” in front. Behind, you see winget inside Windows Terminal/PowerShell working to install 8 different updates.

The amount of effort involved is pretty negligible, and the results are almost always trouble-free, speedy and reliable. Although I still have to turn to third-party tools to catch updates outside this ecosystem, under its umbrella things work pretty darn well.

Now, if only those other app makers would get on the manifest circuit and start offering packages for winget to use, life would be entirely peachy. But alas, life isn’t like that — especially here in Windows-World, where a certain amount of chasing one’s own tail is too often a necessary part of the daily grind.

But a WIMVP can always hope for a better future, right? Surely, someday it will all be completely automated and totally easy. Yeah, right: I’ll keep dreaming about it, but that’s the closest I’m sure I’ll ever get.

Facebooklinkedin
Facebooklinkedin

October 2023 Windows 11 Monthly Active Users

Here’s an interesting item, for a variety of reasons. Yesterday, Zac Bowden at Windows Central reported that “Windows 11 is now in use on over 400 million monthly active devices” (emphasis his). In typical headline fashion the title of the story inflates it to “almost half a billion devices.” I have to laugh about that, but the number of October 2023 Windows 11 monthly active users is no joke. Even if those numbers come from, as Zac puts it, “…my sources who are familiar with the matter…” Right!

What October 2023 Windows 11 Monthly Active Users Means

Mr. B observes that this uptake comes at half the rate for Windows 10, but without the upgrade pressure that Windows 7’s retirement put on those numbers. Ditto for the notion, widely held at the time, that the free upgrade would only last for a year or two. In light of those factors, he also reports that these numbers beat internal MS expectations.

IMHO, business users don’t really care that much about the Windows running on their desktops or devices. Business will migrate when it’s good and ready, which means the clock really hasn’t started ticking too loudly just yet (Windows 10 EOL date is 10/14/2025). In fact, it’s just barely audible right now… That will change next year.

So Good, So Far

In my own experience, I ‘ve found Windows 11 to be a workable, reliable and attractive desktop OS. I’m almost completely migrated myself, with only 1 physical PC still running the older version, along with a handful of strategically placed VMs. I have at least 9 physical PCs running Windows 11 here at Chez Tittel, and another 2 off at college with my number-one son.

But what about those numbers? Given that many (if not most) businesses have yet to move from 10 to 11, I think they’re pretty high. In other words, I’m pleasantly surprised as MS apparently is also. My gut feel is those numbers will swell by as much as 200-300M next year, and more the year after that.

Meanwhile, somewhere between 1.2 (IDC) and 1.4 (Statista) BILLION smartphones sold in 2022. That’s a whole different ballgame. Increasingly it’s the game that matters most. So let’s keep this all in perspective, shall we? That said, Windows-World remains my home!

Facebooklinkedin
Facebooklinkedin

KB5031356 Error Calls for KIR

I just got an example of what makes Microsoft’s KIR, aka Known Issue Rollback, useful in the field. A recent story at WindowsLatest recites how an install KB503135  error calls for KIR. (This KB takes Windows 10 to Builds 19044.3570 or 19045.3570.) Some users are getting error code 0x8007000d along with a failed update. Because the problem is apparently of MIcrosoft’s making, they can use KIR to clean things up through WU by pushing an amended update.

When KB5031356 Error Calls for KIR, Then What?

The lead-in graphic provides some important clues to what KIR does (and comes from a Microsoft Community piece entitled How KIR works for the end user). KIR works by loading a configuration change from the cloud. Devices connected to WU (or WU for Business) get notified (settings data to the PCs at bottom). As the same time the new, problem code gets turned off.

MS tries to head trouble off by identifying and pushing out rollbacks before updates get widely applied. As they put it in the afore-linked item “most end users will never see the regressions.” PCs that agree to provide diagnostics info to MS will send information related to the affected code to which the update and regression apply (that’s the diagnostics data in grey). This idea, says MS is “to help us learn how well the rollback is succeeding…”

What About KB5031356 Itself?

The Update rolled out on October 10 (last Tuesday). Reports started appearing immediately. Apparently, MS pushed the rollback on or around October 12. They say it takes 48 hours for the rollback to interact with updated PCs, so that would indicate users who attempted updates between October 10 and October 14 (Friday) could be affected. Those who do fall prey to the error, according to WindowsLatest, should be able to recover using the DISM … /RestoreHealth command.

The error didn’t bite me, even though I updated on Patch Tuesday. But by now, it should be fixed. Worst case, one could uninstall the original KB then re-install the by-now patched version. That should work!

Facebooklinkedin
Facebooklinkedin

X12 Upgrade Quit Halfway

Yesterday morning, I tried to remote into my Lenovo ThinkPad X12 Hybrid tablet. No go. I got the familiar error “Remote Desktop can’t find the computer…” Interestingly, when I went to restart that PC, nothing happened. Eventually I had to disconnect all cables, then hold the power button down for a full 60 seconds to force it to reboot. Then I remembered: I hadn’t touched the machine since the 25967 upgrade hit on Tuesday. That means the X12 Upgrade quit halfway through the process and didn’t come back up after the reboot.

If the X12 Upgrade Quit Halfway, Then What?

Poking around on the Lenovo website, I found an evocative forum post. It was entitled “Laptop suddenly shuts down, won’t turn on.” It confirmed something odd was up, and prevented the PC from restarting. And indeed, my approach (disconnecting all cables, holding down the power button for 60 seconds) is just what the forum rep recommended to the poster, too.

When all else fails, this is one way to get a Lenovo PC to restart normally. And sure enough, once the PC did get far enough along to tell me what it was doing, it showed the spinning circle and progress that goes along with finishing up an upgrade or update install.

Just for grins, I opened up Reliability Monitor on the X12. I found a shutdown error staring me in the face. The detail reads: “The previous system shutdown at 5:55:00 PM on 10/10/2023 was unexpected.” Last Tuesday, at the end of the working day, just when I wouldn’t notice that the X12 failed to come back from the pending reboot during the update process. Go figure!

There’s proof that the PC shutdown when it shouldn’t have.

Speculating on Causes…

This device is attached to a CalDigit TS4 hub for power, GbE, video and storage. I’m wondering if something about that kind of complex USB-C/Thunderbolt 4 connection might not complicate boot-up. OTOH, I’ve upgraded plenty of times before on the same overall rig without difficulty. That’s what keeps things interesting, here in Windows-World.

Facebooklinkedin
Facebooklinkedin

Syntax Errors Derail PowerShell JSON Edits

I’ve just completed a fascinating project for TekkiGurus: a five-part series on customizing and extending Windows Terminal. For the 5th and final part, I decided to build PowerShell scripting that would handle such customizations I use as don’t fall under the settings.json umbrella. Ironically, one of those tasks involved editing that very file to change the default font. That’s when I saw syntax erors derail PowerShell JSON edits, as shown in the lead-in graphic. Let me explain…

How Did Syntax Errors Derail PowerShell JSON Edits?

I started off my project by asking Copilot to present me with some initial PowerShell commands to handle the following tasks:

1. Download, install and set up Jan DeDobbeleer’s outstanding OhMyPosh prompt customization tool. This turns out to be a more complex task than it might seem, because it requires downloading, unzipping and copying Nerd Fonts into C:\Windows\Fonts, adding an invocation to the PowerShell Profile script, dealing with OhMyPosh, and then selecting a Nerd Font as the WT default.

2. Download, install and add the colortool executable to a default Windows path. Colortool is a GitHub project that provides information about Windows Terminal color assignments for text and text backgrounds. This one was pretty straightforward.

3. Install the winfetch utility that shows WT color schemes, system info, text colors, and a few other odds’n’ends. This required only one line of code, so easy-peasey.

The error showed up at the end of my PS sequence for the OhMyPosh tasks (I’ll refer to this as OMP from now on). Seems that Copilot’s code included two errors that it took me some time to find. First, the object sequence for the default font that OMP required turned out to be the string “.profiles.defaults.font.face” rather than the truncated version that Copilot provided (“.profiles.defaults.font”). Also, it used an alias for the default Nerd Font I chose rather than its full name — that is “CaskaydiaCove NF” instead of “CaskaydiaCove Nerd Font”. Interestingly, this alias worked in Windows 10, but not in Windows 11 (there, only the full name would do).

Errors Found Are Easily Fixed

It took me a while to figure this out because I couldn’t find exact documentation to match my problems precisely. I figured out the object sequence by examining the json.settings file from another Windows PC that had the default already set and following the sequence of the object name hierarchy in use in that file. In other words, I noticed a face property in that file that was missing from my rewritten json.settings file. No wonder it wouldn’t save.

Once I made that change, I got another error message (from Windows 11) that reported it couldn’t find a font named “CaskaydiaCove NF.” I so looked in C:\Windows\Fonts, and sure enough the font name in Explorer is actually “CaskaydiaCove Nerd Font.” And again, once I made that change things worked properly.

As the old saying goes: “It’s always easy when you know how.” It took me a while to get to the last detail in the “how” part, but indeed, it was dead easy after that. Things go that way a lot in Windows-World, especially when writing code or command line instructions. I’m just glad it’s working now!

One More Thing: Replacing Munged JSON File

On the machine where I made the object reference error, settings.json remained munged. It kept throwing errors each time I started up WT or PowerShell. So I  researched the topic and learned that if you open settings.json in a text editor, then delete the whole thing, WT will rebuild that file from programmed defaults when an empty file gets saved. That put my WT and PowerShell environments back to rights, and I was then able to get the corrected script to run to completion on that PC.

I’ll observe that if you’re going to edit settings.json in PowerShell on a Windows PC, it’s a good idea to have a backup at hand to replace that file. I’m learning that it’s kind of like working on the registry, where changes can have even more serious and dire side effects. Cheers!

Facebooklinkedin
Facebooklinkedin

Recent Windows Terminal Follies

It’s always a humbling experience to work and work with Windows. This week, I’ve been relearning how Windows 10 works with Windows Terminal (and sometimes doesn’t). I had to stand up a squeaky clean Windows 10 instance in a VM for some WT testing and research. Tongue planted firmly in cheek as I went through some recent Windows Terminal follies, I realized I’d forgotten more about WT than I’d ever known. Let me explain…

History Underlies Recent Windows Terminal Follies

Today, my production Windows 10 installation has been running since 2016, when I stood up my present primary desktop PC. There have been a LOT of changes to Windows since then. And indeed, Windows Terminal (WT) is one of the things that has changed the most. But because I’d gone along with those changes — growing more experienced and wise to the ways of WT — I really didn’t remember all of the little twists and turns along the way.

Thus, installing a clean Windows 10 OS image came as a series of shocks where WT was concerned. Let me list a few of them:

1. Windows 10 made its Insider Preview debut in 2014, WT didn’t come along until May 2019. Thus, it’s not set as the default command line environment in Windows 10.

2. WinKey+X, to my consternation, kept launching an older PowerShell version (v5.1.19014.3570). And the only version of WT present was an older Preview that I didn’t want.

3. Thus, I found myself visiting the MS Store to grab the latest copy of WT, installing it, then setting it as my default terminal application (see lead-in graphic: notice further than this version needs an upgrade).

Eventually, I got things sorted and where I want them to be. But it did come as something of a shock to understand how much change I’d been introducing to my desktop runtime, step by little step. Only when I had to jump the whole stretch in a single bound did I see how far things has really come.

Some Unexpected MSA Bonuses Also Present

OneDrive picks up files from my User folder as part of what it keeps in the cloud. Apparently this includes my PowerShell Profile, because an invocation to OhMyPosh showed up as I fired off the new WT install for the first time. That made setting up OMP even faster and easier than usual.

The moral of today’s story is that one doesn’t really recognize how far one has come (or how much things have changed) until one is forced to recover the same ground and see what’s different. That’s one good reason why — for me, at least — Windows-World is always an adventure.

Facebooklinkedin
Facebooklinkedin

WT Update Requires Application Restart

In the wake of the latest Patch Tuesday, MS has released an update for Windows Terminal. As it works its way through the upgrade process it makes two identical warnings: “Restart the application to complete the upgrade.” If you look at the lead-in screencap, you can see that because I hadn’t yet closed, then re-opened WT it’s still showing the old version in the list sub-command at the bottom of the PS session. As I’ll explain, WT update requires application restart before the upgrade truly takes effect.

Why WT Update Requires Application Restart

Indeed, the WT update requires users to close all open WT windows and then open a new one. That’s  so it can terminate the (old) running WT process(es). These are, of course, still running the 1.18.2681.0 version. When they’re all closed, the pointer switches to aim at version 1.18.2822.0 instead. Then, when you fire off a new WT instance, it’s running that new version, as you can see in the About info here:

WT Update Requires Application Restart.About-info

After the open/close, the new WT version number pops up in About.

As I’ve explained in a number of recent blog posts here (see this September 28 item as an example), self-update activities can be tricky. The cleanest way to handle this kind of thing is to request users to kill the current running instance after installing a new one. That way, it makes a cleaner hand-off from old to new, and provides a “quiet moment” between when the old and new instances start running to handle the housekeeping involved (changing file pointers, registry entries, environment variables, and so forth).

Still Waiting On Winget to Follow Suit

I’d like to see the Windows Package Manager/App Installer tool known as winget follow Windows Terminal’s lead when it comes to updating itself. Indeed, winget upgrade Microsoft.Winget.
Source_8wekyb3d8bbwe does work. That said, it’s a Store app so mostly this gets handled automatically in the background during its daily update cycles.

But when winget updates itself, even though it succeeds it often ends in a status labeled “Cancelled.” That’s not really true, but it is a valid indicator of the kinds of tricky things that self-updates can do (and cause). I’d like to see it take the same approach as WT, hold itself in abeyance, and let users re-jigger the works to make the transition from old to new versions neat and clean. Is this a pipedream? I hope not!

Facebooklinkedin
Facebooklinkedin

Reboot Fixes Winget Hiccup

I have to laugh. If you take a look at the lead-in graphic you might be tempted to believe something amiss with winget. I was yesterday when this happened on one of my test PCs. So naturally, I tweeted (X’ed?) an MS colleague who runs the winget team. About 5 minutes later he responded with “Try a reboot!” Seems that others had been reporting similar woes amenable to this approach. To my chagrin, indeed a reboot fixes winget hiccup — this time, at least. Sigh.

If Reboot Fixes Winget Hiccup, Then What?

That adds another thing I need to try before bothering the developers another time. And, if that works for me (and some few others), it might also work for you, too. Thus, it should become a part of the normal troubleshooting routine.

Indeed, I had closed and re-opened Windows Terminal prior to contacting the team. And it hadn’t done the trick this time. In fact, I even uninstalled and reinstalled winget and that hadn’t worked, either — as you can see in the lead-in graphic.

Had I known then what I now know, I would’ve tried the reboot before those other more severe fixes. And it would have worked. Thus, the next time winget goes wonky on me (especially after an update) I’ll be sure to reboot my PC and trying again before sounding the alarm.

Interesting, eh? Things may not always look simple or obvious in Windows-World. Thank goodness they may sometimes be both, and amenable to a simple solution. All hail the “three-fingered salute” (remember when CTRL-ALT-DEL would force reboot a PC?) There’s no school like the old school!

Note Added October 10 (early PM hours)

As fate would have it, MS pushed an update to PowerShell today for version 7.3.8 through WU. After it updated my problem test PC, the same issue recurred: winget source was essentially not working. None of my previous fixes (reboot, uninstall & reset sources) worked. I had to force install the current production version (1.6.2771) over the current preview version (1.7.2782) to get things working properly again. Funny that this problem should happen on the very day I attempt to document a different issue. Amazing!

Facebooklinkedin
Facebooklinkedin

Author, Editor, Expert Witness