microsoft / winget-cli

WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell modules, and a COM (Component Object Model) API (Application Programming Interface).
https://learn.microsoft.com/windows/package-manager/
MIT License
22.54k stars 1.39k forks source link

Winget identifies wrong version for Microsoft.DotNet.DesktopRuntime.6 #4470

Open coder114514 opened 1 month ago

coder114514 commented 1 month ago

Brief description of your issue

The version detected by winget is > 6.0.29 and the actual version is 8.0.4

output from winget list:

名称                                                  ID                                版本         源
------------------------------------------------------------------------------------------------------------
Microsoft Windows Desktop Runtime - 8.0.4 (x64)       Microsoft.DotNet.DesktopRuntime.6 > 6.0.29     winget

output from winget upgrade:

名称                                            ID                                版本          可用          源
--------------------------------------------------------------------------------------------------------------------
Microsoft Windows Desktop Runtime - 8.0.4 (x64) Microsoft.DotNet.DesktopRuntime.6 > 6.0.29      8.0.4         winget

Steps to reproduce

...

Expected behavior

Should be 8.0.4

Actual behavior

Reports > 6.0.29

Environment

Windows.Desktop v10.0.19045.4355
X64
Microsoft.DesktopAppInstaller v1.22.11261.0
github-actions[bot] commented 1 month ago

Hi I'm an AI powered bot that finds similar issues based off the issue title.

Please view the issues below to see if they solve your problem, and if the issue describes your problem please consider closing this one and thumbs upping the other issue to help us prioritize it. Thank you!

Open similar issues:

Closed similar issues:

Note: You can give me feedback by thumbs upping or thumbs downing this comment.

coder114514 commented 1 month ago

I only have one version of desktop runtime installed.

stephengillie commented 1 month ago

I think the version is being misdetected. It's finding Microsoft.DotNet.DesktopRuntime.6, but I think the package you have installed might have the slightly different PackageIdentifier of Microsoft.DotNet.DesktopRuntime.8 (last digit changes).

This is based on the version you have installed showing 8.0.4, which matches the .8 package:

PS C:\ManVal> Find-WinGetPackage Microsoft.DotNet.DesktopRuntime

Name                                               Id                                      Version                 Source
----                                               --                                      -------                 ------
Microsoft .NET Windows Desktop Runtime 9.0 Preview Microsoft.DotNet.DesktopRuntime.Preview 9.0.0-preview.3.24175.3 winget
Microsoft .NET Windows Desktop Runtime 8.0         Microsoft.DotNet.DesktopRuntime.8       8.0.4                   winget
Microsoft .NET Windows Desktop Runtime 7.0         Microsoft.DotNet.DesktopRuntime.7       7.0.18                  winget
Microsoft .NET Windows Desktop Runtime 6.0         Microsoft.DotNet.DesktopRuntime.6       6.0.29                  winget
Microsoft .NET Windows Desktop Runtime 5.0         Microsoft.DotNet.DesktopRuntime.5       5.0.17                  winget
Microsoft .NET Windows Desktop Runtime 3.1         Microsoft.DotNet.DesktopRuntime.3_1     3.1.32                  winget

PS C:\ManVal>

When your system shows > 6.0.29, it means that 6.0.29 is the highest version of Microsoft.DotNet.DesktopRuntime.6 in the repo, but somehow the computer's Registry shows a higher version installed. It's showing this because it's mis-matching with the .6 version when it should be matching to the .8 version.

Why is it mis-matching? It matches Registry data against repo data. Sometimes, this is from a previous install that didn't get completely uninstalled, and still has a few lines in the Registry. Could that have happened here?

coder114514 commented 1 month ago

Well, I cannot figure out where the previous install is. And I've tried installing desktop runtime 6 and then uninstall it, but it is still mis-matching. (btw sry for the late response)

coder114514 commented 1 month ago

So there's two entries of desktop runtime in the registry. And it seems like only {f1bec...} is recognized by the system (appwiz.cpl) and winget. After I deleted the {f1bec...} entry in the registry, the system and winget is reading the {CE4D...} entry, which isn't matched to any package id by winget at all.

cprivitere commented 1 month ago

Here's what's happening as of 6.0.31 being installed (automatically by windows update).

winget update --all
Name                                             Id                                Version     Available   Source
-----------------------------------------------------------------------------------------------------------------
Microsoft Windows Desktop Runtime - 6.0.31 (x64) Microsoft.DotNet.DesktopRuntime.7 < 7.0.0     7.0.20      winget
coder114514 commented 3 weeks ago

After updating to 8.0.6, the issue still isn't solved.

cprivitere commented 2 weeks ago

So for reference, it's common to need more than one version installed due to some apps not being updated to accept later versions as compatible (and thus force installing the older version). Right now the currently valid versions of .Net are: .Net 9 as the current preview version .Net 8 as the latest stable and LTS .Net 6 as the previous but still maintained LTS.

winget forcibly upgrading .Net 6 to .Net 7 is not ok as it's not maintained anymore.

===

Just noticed in another issue the experimental "sidebySide" feature. That seems to have fixed the behavior for me.