Files
PowerToys/src/modules/launcher/Wox.Plugin/Common/DefaultBrowserInfo.cs

202 lines
8.7 KiB
C#
Raw Normal View History

// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Text;
using Wox.Plugin.Common.Win32;
using Wox.Plugin.Logger;
namespace Wox.Plugin.Common
{
/// <summary>
/// Contains information (e.g. path to executable, name...) about the default browser.
/// </summary>
public static class DefaultBrowserInfo
{
private static readonly object _updateLock = new object();
/// <summary>Gets the path to the MS Edge browser executable.</summary>
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
public static string MSEdgePath => System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
@"Microsoft\Edge\Application\msedge.exe");
/// <summary>Gets the command line pattern of the MS Edge.</summary>
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
public const string MSEdgeArgumentsPattern = "--single-argument %1";
public const string MSEdgeName = "Microsoft Edge";
/// <summary>Gets the path to default browser's executable.</summary>
public static string Path { get; private set; }
/// <summary>Gets <see cref="Path"/> since the icon is embedded in the executable.</summary>
public static string IconPath => Path;
/// <summary>Gets the user-friendly name of the default browser.</summary>
public static string Name { get; private set; }
/// <summary>Gets the command line pattern of the default browser.</summary>
public static string ArgumentsPattern { get; private set; }
public static bool IsDefaultBrowserSet { get => !string.IsNullOrEmpty(Path); }
public const long UpdateTimeout = 300;
private static long _lastUpdateTickCount = -UpdateTimeout;
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
private static bool _updatedOnce;
private static bool _errorLogged;
/// <summary>
/// Updates only if at least more than 300ms has passed since the last update, to avoid multiple calls to <see cref="Update"/>.
/// (because of multiple plugins calling update at the same time.)
/// </summary>
public static void UpdateIfTimePassed()
{
long curTickCount = Environment.TickCount64;
if (curTickCount - _lastUpdateTickCount >= UpdateTimeout)
{
_lastUpdateTickCount = curTickCount;
Update();
}
}
/// <summary>
/// Consider using <see cref="UpdateIfTimePassed"/> to avoid updating multiple times.
/// (because of multiple plugins calling update at the same time.)
/// </summary>
public static void Update()
{
lock (_updateLock)
{
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
if (!_updatedOnce)
{
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
Log.Info("I've tried updating the chosen Web Browser info at least once.", typeof(DefaultBrowserInfo));
_updatedOnce = true;
}
try
{
string progId = GetRegistryValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice",
"ProgId");
string appName = GetRegistryValue($@"HKEY_CLASSES_ROOT\{progId}\Application", "ApplicationName")
?? GetRegistryValue($@"HKEY_CLASSES_ROOT\{progId}", "FriendlyTypeName");
if (appName != null)
{
// Handle indirect strings:
if (appName.StartsWith('@'))
{
appName = GetIndirectString(appName);
}
appName = appName
.Replace("URL", null, StringComparison.OrdinalIgnoreCase)
.Replace("HTML", null, StringComparison.OrdinalIgnoreCase)
.Replace("Document", null, StringComparison.OrdinalIgnoreCase)
.Replace("Web", null, StringComparison.OrdinalIgnoreCase)
.TrimEnd();
}
Name = appName;
string commandPattern = GetRegistryValue($@"HKEY_CLASSES_ROOT\{progId}\shell\open\command", null);
if (string.IsNullOrEmpty(commandPattern))
{
throw new ArgumentOutOfRangeException(
nameof(commandPattern),
"Default browser program command is not specified.");
}
if (commandPattern.StartsWith('@'))
{
commandPattern = GetIndirectString(commandPattern);
}
// HACK: for firefox installed through Microsoft store
// When installed through Microsoft Firefox the commandPattern does not have
// quotes for the path. As the Program Files does have a space
// the extracted path would be invalid, here we add the quotes to fix it
const string FirefoxExecutableName = "firefox.exe";
if (commandPattern.Contains(FirefoxExecutableName) && commandPattern.Contains(@"\WindowsApps\") && (!commandPattern.StartsWith('\"')))
{
var pathEndIndex = commandPattern.IndexOf(FirefoxExecutableName, StringComparison.Ordinal) + FirefoxExecutableName.Length;
commandPattern = commandPattern.Insert(pathEndIndex, "\"");
commandPattern = commandPattern.Insert(0, "\"");
}
if (commandPattern.StartsWith('\"'))
{
var endQuoteIndex = commandPattern.IndexOf('\"', 1);
if (endQuoteIndex != -1)
{
Path = commandPattern.Substring(1, endQuoteIndex - 1);
ArgumentsPattern = commandPattern.Substring(endQuoteIndex + 1).Trim();
}
}
else
{
var spaceIndex = commandPattern.IndexOf(' ');
if (spaceIndex != -1)
{
Path = commandPattern.Substring(0, spaceIndex);
ArgumentsPattern = commandPattern.Substring(spaceIndex + 1).Trim();
}
}
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
// Packaged applications could be an URI. Example: shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App
if (!System.IO.Path.Exists(Path) && !Uri.TryCreate(Path, UriKind.Absolute, out _))
{
throw new ArgumentException(
$"Command validation failed: {commandPattern}",
nameof(commandPattern));
}
if (string.IsNullOrEmpty(Path))
{
throw new ArgumentOutOfRangeException(
nameof(Path),
"Default browser program path could not be determined.");
}
}
catch (Exception e)
{
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
// Fallback to MS Edge
Path = MSEdgePath;
Name = MSEdgeName;
ArgumentsPattern = MSEdgeArgumentsPattern;
[Run] Improve default browser detection (#34132) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Some users are reporting that the WebSearch plugin is opening Explorer instead of the browser. - A user reported that the registry value we are using to detect the command pattern to start the browser contains the string `Microsoft Edge HTML Document`: https://github.com/microsoft/PowerToys/issues/21400#issuecomment-2262764771 - Can't find the reason why that string is here but rather than dealing with this string, if the pattern isn't "something valid" to be launched, use Edge. The code is already falling back to Edge in other error cases. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #21400 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments - Small QoL improvements to the code - Logged the command in case of error - Fall back to Edge if command isn't a valid path or URI <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Tested WebSearch plugin changing the value of `HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command`: - `"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1` - `shell:AppsFolder\Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App %1` - `Microsoft Edge HTML Document`
2024-08-07 09:38:40 +02:00
if (!_errorLogged)
{
Log.Exception("Exception when retrieving browser path/name. Path and Name are set to use Microsoft Edge.", e, typeof(DefaultBrowserInfo));
_errorLogged = true;
}
}
string GetRegistryValue(string registryLocation, string valueName)
{
return Microsoft.Win32.Registry.GetValue(registryLocation, valueName, null) as string;
}
string GetIndirectString(string str)
{
var stringBuilder = new StringBuilder(128);
if (NativeMethods.SHLoadIndirectString(
str,
stringBuilder,
(uint)stringBuilder.Capacity,
IntPtr.Zero)
== HRESULT.S_OK)
{
return stringBuilder.ToString();
}
throw new ArgumentNullException(nameof(str), "Could not load indirect string.");
}
}
}
}
}