Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Installer locale does not match required locale (No applicable installer found; see logs for more details.) #2305

Open
MartinSGill opened this issue Jul 3, 2022 · 3 comments · May be fixed by #4447
Labels
In-PR Issue related to a PR Issue-Bug It either shouldn't be doing this or needs an investigation.
Milestone

Comments

@MartinSGill
Copy link

Brief description of your issue

Attempting to install a package, I get an error message: "No applicable installer found; see logs for more details."

I first noticed this with upgrade --all failing to upgrade many packages without any warnings/errors. Then tried to uninstall/reinstall packages manually and discovered this issue.

Steps to reproduce

Tried this with a number of applications (installer types), including:

  • winget install OpenTTD.OpenTTD (nullsoft)
  • winget install Microsoft.PowerToys (burn)
  • REALiX.HWiNFO (inno)

All gave the same error, non of them installed correctly.

Downloading the installer (from the manifest file) and running it directly works without issue.

Expected behavior

Correctly install the application, or provide a helpful error message.

Actual behavior

Nothing happens; useless error message.

Environment

## Env

Windows Package Manager (Preview) v1.3.1391-preview
Copyright (c) Microsoft Corporation. All rights reserved.

Windows: Windows.Desktop v10.0.22000.739
System Architecture: X64
Package: Microsoft.DesktopAppInstaller v1.18.1391.0

Logs: %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir

## log


2022-07-03 16:50:05.505 [CORE] WinGet, version [1.3.1391-preview], activity [{84FB7417-A1CA-4E25-A8D8-74FE95FDC52C}]
2022-07-03 16:50:05.506 [CORE] OS: Windows.Desktop v10.0.22000.739
2022-07-03 16:50:05.506 [CORE] Command line Args: "C:\Users\marti\AppData\Local\Microsoft\WindowsApps\winget.exe" install OpenTTD.OpenTTD
2022-07-03 16:50:05.506 [CORE] Package: Microsoft.DesktopAppInstaller v1.18.1391.0
2022-07-03 16:50:05.506 [CORE] IsCOMCall:0; Caller: winget-cli
2022-07-03 16:50:05.511 [CLI ] WinGet invoked with arguments: 'install' 'OpenTTD.OpenTTD'
2022-07-03 16:50:05.511 [CLI ] Found subcommand: install
2022-07-03 16:50:05.511 [CLI ] Leaf command to execute: root:install
2022-07-03 16:50:05.514 [CLI ] Executing command: install
2022-07-03 16:50:05.515 [REPO] GetCurrentSourceRefs: Source named 'microsoft.builtin.desktop.frameworks' from origin Default is hidden and is dropped.
2022-07-03 16:50:05.515 [REPO] Default source requested, multiple sources available, adding all to source references.
2022-07-03 16:50:05.515 [REPO] Adding to source references msstore
2022-07-03 16:50:05.515 [REPO] Adding to source references winget
2022-07-03 16:50:05.515 [REPO] Multiple sources available, creating aggregated source.
2022-07-03 16:50:05.515 [REPO] Adding to aggregated source: msstore
2022-07-03 16:50:05.515 [REPO] Sending http GET request to: https://storeedgefd.dsx.mp.microsoft.com/v9.0/information
2022-07-03 16:50:05.617 [REPO] Response status: 200
2022-07-03 16:50:05.617 [REPO] Sending http GET request to: https://storeedgefd.dsx.mp.microsoft.com/v9.0/information
2022-07-03 16:50:05.653 [REPO] Response status: 200
2022-07-03 16:50:05.654 [REPO] Adding to aggregated source: winget
2022-07-03 16:50:05.664 [CORE] Examining extension: PFN = Microsoft.Winget.MSStore.Source_8wekyb3d8bbwe, ID = IndexDB
2022-07-03 16:50:05.667 [CORE] Examining extension: PFN = Microsoft.Winget.Source_8wekyb3d8bbwe, ID = IndexDB
2022-07-03 16:50:05.667 [CORE] Found matching extension.
2022-07-03 16:50:05.687 [REPO] Opening SQLite Index for ImmutableRead at 'C:\Program Files\WindowsApps\Microsoft.Winget.Source_2022.703.1522.494_neutral__8wekyb3d8bbwe\Public\index.db'
2022-07-03 16:50:05.687 [SQL ] Opening SQLite connection: 'file:/C:/Program Files/WindowsApps/Microsoft.Winget.Source_2022.703.1522.494_neutral__8wekyb3d8bbwe/Public/index.db?immutable=1' [1, 40]
2022-07-03 16:50:05.687 [REPO] Opened SQLite Index with version [1.3], last write [2022-07-03 16:22:26.000]
2022-07-03 16:50:05.889 [REPO] Sending http POST request to: https://storeedgefd.dsx.mp.microsoft.com/v9.0/manifestSearch
2022-07-03 16:50:06.168 [REPO] Response status: 200
2022-07-03 16:50:06.176 [CLI ] Found one app. App id: OpenTTD.OpenTTD App name: OpenTTD
2022-07-03 16:50:06.177 [REPO] Downloading manifest
2022-07-03 16:50:06.177 [CORE] WinINet downloading from url: https://cdn.winget.microsoft.com/cache/manifests/o/OpenTTD/OpenTTD/12.2/d412-OpenTTD.OpenTTD.yaml
2022-07-03 16:50:06.686 [CORE] Download hash: 254fd0703a055cb9999ccf99aee7745cf97c25a0654eba733626dbb1086a863a
2022-07-03 16:50:06.686 [CORE] Download completed.
2022-07-03 16:50:06.686 [CLI ] Manifest fields: Name [OpenTTD], Version [12.2]
2022-07-03 16:50:06.687 [CLI ] Starting installer selection.
2022-07-03 16:50:06.687 [CLI ] Installer [X64,nullsoft,Machine,] not applicable: Installer locale does not match required locale: Required locales: [en-GB, en-US, en]
2022-07-03 16:50:06.687 [CLI ] Installer [X86,nullsoft,Machine,] not applicable: Installer locale does not match required locale: Required locales: [en-GB, en-US, en]
2022-07-03 16:50:06.687 [CLI ] Installer [Arm64,nullsoft,Machine,] not applicable: Installer locale does not match required locale: Required locales: [en-GB, en-US, en]
2022-07-03 16:50:06.687 [CLI ] Installer [Arm64,nullsoft,Machine,] not applicable: Machine is not compatible with Arm64
2022-07-03 16:50:06.696 [CLI ] Terminating context: 0x8a150010 at D:\a\_work\1\s\external\pkg\src\AppInstallerCLICore\Workflows\InstallFlow.cpp:76
@ghost ghost added the Needs-Triage Issue need to be triaged label Jul 3, 2022
@denelon denelon added Issue-Bug It either shouldn't be doing this or needs an investigation. and removed Needs-Triage Issue need to be triaged labels Jul 5, 2022
@denelon denelon added this to the v1.4-Client milestone Aug 8, 2022
@denelon denelon modified the milestones: v1.4-Client, v1.5-Client Dec 28, 2022
@MartinSGill
Copy link
Author

Still seeing this issue. The log message has become better at least.

[...] Required locales: [en-GB, en-US, en] Or does not satisfy compatible match for Preferred Locales: [en-IE, en-US, en-GB, de-DE, ja]

@denelon denelon modified the milestones: v1.5-Client, v.Next-Client Apr 18, 2023
@ckagerer
Copy link

ckagerer commented Jan 6, 2024

Same issue for me, for the following update

Epic Games Launcher    EpicGames.EpicGamesLauncher    1.3.82.0 1.3.93.0  winget

I was able to force an update with this:

winget upgrade EpicGames.EpicGamesLauncher --locale en-US

The cause seems to lie in the manifesto. In which the entry InstallerLocal has been added.

grafik

@d0ggie
Copy link

d0ggie commented May 4, 2024

The problem is indeed a missing InstallerLocale in the manifest and how it is handled (or lack thereof) in the ManifestComparator. This omittance will be problematic, if settings.json contains installBehavior > preferences > locale or --locale is used.

Unless InstallerLocale is present, Manifest::ManifestInstaller::Locale will be an empty string. This is even visible in the log message, "Installer locale does not match required locale: Required locales [...]", which should display the required locale:

std::string ExplainInapplicable(const Manifest::ManifestInstaller& installer) override
{
std::string result = "Installer locale does not match required locale: ";
result += installer.Locale;
result += "Required locales: ";
result += m_requirementAsString;
result += " Or does not satisfy compatible match for Preferred Locales: ";
result += m_preferenceAsString;
return result;
}

The problem is likely just a small mishap, just a few lines above, which happened in commit 4b613b3. For a Preferred Locale a match is always made, if the Installer Locale is empty. This code path is not taken, unless the locale is what is currently installed. This is exactly why one would like to use --locale, override the locale derived from the currently installed version.

if (installer.Locale.empty() ||
Locale::GetDistanceOfLanguage(preferredLocale, installer.Locale) >= Locale::MinimumDistanceScoreAsCompatibleMatch)

However, in case of a Required Locale, the empty Installer Locale is not checked. This code path is not taken, if there is no Required Locale present, i.e. --locale or a corresponding settings.json setting.

if (Locale::GetDistanceOfLanguage(requiredLocale, installer.Locale) >= Locale::MinimumDistanceScoreAsPerfectMatch)

Unless there is a match (and for an empty string there is none), GetDistanceOfLanguage returns 0.0 (more precisely, this is what GetDistanceOfClosestLanguageInList sets as the distance, if no match is found or either [or both] of the input strings are empty).

So, to summarize, at the moment installing a problematic package is not possible with --locale (manifest is missing InstallerLocale) or without --locale (manifest PackageLocale and installed locale do not match; the reported installed version is not necessarily correct, but this is obviously the problem with the installer).

@d0ggie d0ggie linked a pull request May 4, 2024 that will close this issue
2 tasks
@microsoft-github-policy-service microsoft-github-policy-service bot added the In-PR Issue related to a PR label May 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
In-PR Issue related to a PR Issue-Bug It either shouldn't be doing this or needs an investigation.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants