UniGetUI icon indicating copy to clipboard operation
UniGetUI copied to clipboard

[BUG] Programs with "<" character in the version number are not listed as updates

Open andju opened this issue 5 months ago • 8 comments

Please confirm these before moving forward

  • [x] I have searched for my issue and have not found a work-in-progress/duplicate/resolved issue.
  • [x] I have tested that this issue has not been fixed in the latest (beta or stable) release.
  • [x] I have checked the FAQ section for solutions.
  • [x] This issue is about a bug (if it is not, please use the correct template).

UniGetUI Version

3.3.0

Windows version, edition, and architecture

Windows 11 10.0.26100 Build 26100

Describe your issue

If the (currently installed) version of a program has the ">" character in its version number (e.g. < 12.11.0.7065), it will not be shown in the section "Software-Updates" of UniGetUI.

Steps to reproduce the issue

  1. Download and install the previous version of a software - e.g. HeidiSQL v12.10 (revision 7000) - from here.
  2. Open a command line and type winget list --upgrade-available - you will see that HeidiSQL is listed.
  3. Open UniGetUI and navigate to the tab "Software-Updates - you will see that HeidiSQL is not listed

UniGetUI Log

[20.07.2025 13:01:40]    __  __      _ ______     __  __  ______
                        / / / /___  (_) ____/__  / /_/ / / /  _/
                       / / / / __ \/ / / __/ _ \/ __/ / / // /
                      / /_/ / / / / / /_/ /  __/ /_/ /_/ // /
                      \____/_/ /_/_/\____/\___/\__/\____/___/
                          Welcome to UniGetUI Version 3.3.0
[20.07.2025 13:01:40]
[20.07.2025 13:01:40] Build 96
[20.07.2025 13:01:40] Data directory C:\Users\Andi\AppData\Local\UniGetUI
[20.07.2025 13:01:40] Encoding Code Page set to 437
[20.07.2025 13:01:41] Could not retrieve token (it may not exist): Element nicht gefunden.
                      
                      Anmeldeinformationen können nicht aus dem Tresor abgerufen werden.
[20.07.2025 13:01:41] Loaded language locale: de
[20.07.2025 13:01:41] Lang files were updated successfully from GitHub
[20.07.2025 13:01:42] Randomly-generated background API auth token: xu6hgzfk23b7mhfj3z3kmsqanot3d1wtz1ylfoo3rch5rb4533bacx1nuzfl4oak
[20.07.2025 13:01:42] Call to WhichMultiple with file choco.exe returned non-zero status 1
[20.07.2025 13:01:42] Command choco.exe was not found on the system
[20.07.2025 13:01:42] Call to WhichMultiple with file pwsh.exe returned non-zero status 1
[20.07.2025 13:01:42] Command pwsh.exe was not found on the system
[20.07.2025 13:01:42] Call to WhichMultiple with file dotnet.exe returned non-zero status 1
[20.07.2025 13:01:42] Command dotnet.exe was not found on the system
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: .NET Tool
                      █ Enabled: True
                      █ Found: False
                      █ THE MANAGER WAS NOT FOUND. PERHAPS IT IS NOT 
                      █ INSTALLED OR IT HAS BEEN MISCONFIGURED 
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:42] Call to WhichMultiple with file cargo.exe returned non-zero status 1
[20.07.2025 13:01:42] Command cargo.exe was not found on the system
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Cargo
                      █ Enabled: True
                      █ Found: False
                      █ THE MANAGER WAS NOT FOUND. PERHAPS IT IS NOT 
                      █ INSTALLED OR IT HAS BEEN MISCONFIGURED 
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:42] Call to WhichMultiple with file pwsh.exe returned non-zero status 1
[20.07.2025 13:01:42] Command pwsh.exe was not found on the system
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: PowerShell7
                      █ Enabled: True
                      █ Found: False
                      █ THE MANAGER WAS NOT FOUND. PERHAPS IT IS NOT 
                      █ INSTALLED OR IT HAS BEEN MISCONFIGURED 
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:42] Call to WhichMultiple with file vcpkg.exe returned non-zero status 1
[20.07.2025 13:01:42] Command vcpkg.exe was not found on the system
[20.07.2025 13:01:42] Could not initialize Package Manager Chocolatey
[20.07.2025 13:01:42] Call to WhichMultiple with file scoop.ps1 returned non-zero status 1
[20.07.2025 13:01:42] Command scoop.ps1 was not found on the system
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Scoop
                      █ Enabled: True
                      █ Found: False
                      █ THE MANAGER WAS NOT FOUND. PERHAPS IT IS NOT 
                      █ INSTALLED OR IT HAS BEEN MISCONFIGURED 
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:42] Call to WhichMultiple with file vcpkg returned non-zero status 1
[20.07.2025 13:01:42] Command vcpkg was not found on the system
[20.07.2025 13:01:42] Call to WhichMultiple with file vcpkg returned non-zero status 1
[20.07.2025 13:01:42] Command vcpkg was not found on the system
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: vcpkg
                      █ Enabled: True
                      █ Found: False
                      █ THE MANAGER WAS NOT FOUND. PERHAPS IT IS NOT 
                      █ INSTALLED OR IT HAS BEEN MISCONFIGURED 
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:42] System.ComponentModel.Win32Exception (2): An error occurred trying to start process 'C:\Users\Andi\AppData\Local\UniGetUI\Chocolatey\choco.exe' with working directory 'C:\Program Files\UniGetUI'. Das System kann die angegebene Datei nicht finden.
                         at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo)
                         at UniGetUI.PackageEngine.Managers.ChocolateyManager.Chocolatey.LoadManager() in C:\SomePrograms\WingetUI-Store\src\UniGetUI.PackageEngine.Managers.Chocolatey\Chocolatey.cs:line 317
                         at UniGetUI.PackageEngine.ManagerClasses.Manager.PackageManager.Initialize() in C:\SomePrograms\WingetUI-Store\src\UniGetUI.PackageEngine.PackageManagerClasses\Manager\PackageManager.cs:line 70
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Pip
                      █ Enabled: True
                      █ Found: False
                      █ THE MANAGER WAS NOT FOUND. PERHAPS IT IS NOT 
                      █ INSTALLED OR IT HAS BEEN MISCONFIGURED 
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:42] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Winget
                      █ Enabled: True
                      █ Found: True
                      █ Fancy exe name: winget.exe
                      █ Executable path: C:\Users\Andi\AppData\Local\Microsoft\WindowsApps\winget.exe
                      █ Call arguments: 
                      █ Version: 
                      █   System WinGet CLI Version: v1.11.400
                      █   Using Native WinGet helper (COM Api)
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:43] Api running on http://localhost:7058
[20.07.2025 13:01:43] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Npm
                      █ Enabled: True
                      █ Found: True
                      █ Fancy exe name: npm
                      █ Executable path: C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe
                      █ Call arguments: -NoProfile -ExecutionPolicy Bypass -Command "C:\Program` Files\nodejs\npm.ps1" 
                      █ Version: 
                      █   10.9.2
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:45] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: PowerShell
                      █ Enabled: True
                      █ Found: True
                      █ Fancy exe name: powershell.exe
                      █ Executable path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                      █ Call arguments:  -NoProfile -Command
                      █ Version: 
                      █   Name                           Value                                                                                   
                      █   ----                           -----                                                                                   
                      █   PSVersion                      5.1.26100.4652                                                                          
                      █   PSEdition                      Desktop                                                                                 
                      █   PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                 
                      █   BuildVersion                   10.0.26100.4652                                                                         
                      █   CLRVersion                     4.0.30319.42000                                                                         
                      █   WSManStackVersion              3.0                                                                                     
                      █   PSRemotingProtocolVersion      2.3                                                                                     
                      █   SerializationVersion           1.1.0.1
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[20.07.2025 13:01:45] LoadComponentsAsync finished executing. All managers loaded. Proceeding to interface.
[20.07.2025 13:01:45] Downloaded new icons and screenshots successfully!
[20.07.2025 13:01:46] Found 184 installed packages from Winget
[20.07.2025 13:01:47] Found 12 available updates from Winget
[20.07.2025 13:01:47] Found 0 installed packages from PowerShell
[20.07.2025 13:01:47] Found 0 available updates from PowerShell
[20.07.2025 13:01:47] Found 0 available updates from Npm
[20.07.2025 13:01:47] Found 0 installed packages from Npm
[20.07.2025 13:01:51] Could not parse Images array from Microsoft Store response
[20.07.2025 13:01:54] Could not parse Images array from Microsoft Store response

Package Managers Logs

Manager WinGet with version:
System WinGet CLI Version: v1.11.400
Using Native WinGet helper (COM Api)

——————————————————————————————————————————


Logged native task on manager Winget. Task type is ListSources
Process start time: 20.07.2025 13:01:42
Process end time:   20.07.2025 13:01:42

-- Task information
 ...

The task reported success

——————————————————————————————————————————

Logged subprocess-based task on manager Winget. Task type is RefreshIndexes
Subprocess executable: "C:\Users\Andi\AppData\Local\Microsoft\WindowsApps\winget.exe"
Command-line arguments: " source update --disable-interactivity "
Process start time: 20.07.2025 13:01:45
Process end time:   20.07.2025 13:01:46

-- Process STDOUT
 ...

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged native task on manager Winget. Task type is ListInstalledPackages
Process start time: 20.07.2025 13:01:45
Process end time:   20.07.2025 13:01:46

-- Task information
 ...

The task reported success

——————————————————————————————————————————

Logged native task on manager Winget. Task type is OtherTask
Process start time: 20.07.2025 13:01:45
Process end time:   20.07.2025 13:01:46

-- Task information
 ...

The task reported success

——————————————————————————————————————————

Logged native task on manager Winget. Task type is ListUpdates
Process start time: 20.07.2025 13:01:46
Process end time:   20.07.2025 13:01:47

-- Task information
 ...

The task reported success

——————————————————————————————————————————

Relevant information

No response

Screenshots and videos

In the terminal 12 updates are shown - two of which with the ">" character in the version number.

Image

On the UniGetUI only 10 are shown - none with the ">" character in the version number.

Image

andju avatar Jul 20 '25 11:07 andju

Update: This does also happen with other special characters like "(" and ")". Image

andju avatar Jul 31 '25 19:07 andju

This is why versioning is a problem everywhere 🙁

I considered stripping out the "<", but that doesn't work for the other special characters. We can't only load numbers and periods because "July 2025" isn't part of the version - although it might not hurt if it's part of the minor version. So I'm not totally sure how we can implement this.

mrixner avatar Aug 02 '25 15:08 mrixner

This is why versioning is a problem everywhere 🙁

I considered stripping out the "<", but that doesn't work for the other special characters. We can't only load numbers and periods because "July 2025" isn't part of the version - although it might not hurt if it's part of the minor version. So I'm not totally sure how we can implement this.

The easiest way would be to compare the strings of the installed version and latest version. If they differ, an update is available.

andju avatar Aug 02 '25 17:08 andju

It is not as simple, if you have a newer version installed then it would show as an update, and inconsistencies such as. 1.2 and 1.2.0 would also fail. Furthermore, there are times where winget actually shows > 3.x.x (greater than something), and then a simple string check wouldn't work either

marticliment avatar Aug 02 '25 21:08 marticliment

As you rightly said, versioning is a problem and there is probably not a perfect solution. My suggestion would be:

  1. If version numbers can be compared (0-9 and .), compare them.
  2. If the version number starts with < or >, adjust the comparison accordingly.
  3. If version numbers can't be compared (because other characters are present), check whether the strings are different. Maybe you can add an option to exclude these cases from auto-updates.

It should work for most cases - and also seems to be what winget is doing. If a user has a newer version installed, he is probably experienced and can (manually) choose to ignore the update.

andju avatar Aug 13 '25 08:08 andju

That should be doable with the new standardized versions, right? They can have a flag for greater than or less than and the abstracted version comparer can use those instead of the number. Then any other special characters can be ignored (maybe a space sepersrion? No real version would have that, right? Just the Metadata for visual studio) cause they're not relevant but these ones would be parsed.

mrixner avatar Aug 15 '25 01:08 mrixner

The issue here is that those versions are too abstract

marticliment avatar Aug 16 '25 19:08 marticliment

winget uses them when unable to detect things, but they are not quite trustable (as far as I have found)

marticliment avatar Aug 16 '25 19:08 marticliment