Whitespace and type fixes (#5917)

This commit is contained in:
Clint Rutkas
2020-08-13 15:31:14 -07:00
committed by GitHub
parent 24d7232559
commit e02977edc0
18 changed files with 147 additions and 103 deletions

View File

@@ -57,6 +57,7 @@ namespace Microsoft.Plugin.Program
System.Windows.MessageBox.Show(_context.API.GetTranslation("wox_plugin_program_invalid_path"));
return;
}
if (_editing == null)
{
if (!ProgramSetting.ProgramSettingDisplayList.Any(x => x.UniqueIdentifier == Directory.Text))

View File

@@ -40,9 +40,10 @@ namespace Microsoft.Plugin.Program.Logger
var rule = new LoggingRule("*", LogLevel.Debug, target);
#else
var rule = new LoggingRule("*", LogLevel.Error, target);
#endif
#endif
configuration.LoggingRules.Add(rule);
}
LogManager.Configuration = configuration;
}
@@ -55,7 +56,7 @@ namespace Microsoft.Plugin.Program.Logger
{
Debug.WriteLine($"ERROR{classname}|{callingMethodName}|{loadingProgramPath}|{interpretationMessage}");
var logger = LogManager.GetLogger("");
var logger = LogManager.GetLogger(string.Empty);
var innerExceptionNumber = 1;
@@ -102,11 +103,11 @@ namespace Microsoft.Plugin.Program.Logger
[MethodImpl(MethodImplOptions.Synchronized)]
internal static void LogException(string message, Exception e)
{
//Index 0 is always empty.
// Index 0 is always empty.
var parts = message.Split('|');
if (parts.Length < 4)
{
var logger = LogManager.GetLogger("");
var logger = LogManager.GetLogger(string.Empty);
logger.Error(e, $"fail to log exception in program logger, parts length is too small: {parts.Length}, message: {message}");
}

View File

@@ -35,6 +35,7 @@ namespace Microsoft.Plugin.Program
{
_settingsStorage = new PluginJsonStorage<ProgramPluginSettings>();
_settings = _settingsStorage.Load();
// This helper class initializes the file system watchers based on the locations to watch
_win32ProgramRepositoryHelper = new Win32ProgramFileSystemWatchers();
@@ -63,7 +64,6 @@ namespace Microsoft.Plugin.Program
Task.WaitAll(a, b);
_settings.LastIndexTime = DateTime.Today;
}
public void Save()
@@ -132,7 +132,7 @@ namespace Microsoft.Plugin.Program
public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
{
if(selectedResult == null)
if (selectedResult == null)
{
throw new ArgumentNullException(nameof(selectedResult));
}
@@ -152,12 +152,12 @@ namespace Microsoft.Plugin.Program
{
try
{
if(runProcess == null)
if (runProcess == null)
{
throw new ArgumentNullException(nameof(runProcess));
}
if(info == null)
if (info == null)
{
throw new ArgumentNullException(nameof(info));
}

View File

@@ -12,11 +12,11 @@ namespace Microsoft.Plugin.Program
{
public DateTime LastIndexTime { get; set; }
public List<ProgramSource> ProgramSources { get;} = new List<ProgramSource>();
public List<ProgramSource> ProgramSources { get; } = new List<ProgramSource>();
public List<DisabledProgramSource> DisabledProgramSources { get;} = new List<DisabledProgramSource>();
public List<DisabledProgramSource> DisabledProgramSources { get; } = new List<DisabledProgramSource>();
public List<string> ProgramSuffixes { get; } = new List<string>(){ "bat", "appref-ms", "exe", "lnk", "url" };
public List<string> ProgramSuffixes { get; } = new List<string>() { "bat", "appref-ms", "exe", "lnk", "url" };
public bool EnableStartMenuSource { get; set; } = true;
@@ -29,7 +29,6 @@ namespace Microsoft.Plugin.Program
public double MinScoreThreshold { get; set; } = 0.75;
internal const char SuffixSeparator = ';';
}
/// <summary>

View File

@@ -9,7 +9,7 @@ using System.Runtime.InteropServices;
namespace Microsoft.Plugin.Program.Programs.ApplicationActivationHelper
{
// Reference : https://github.com/MicrosoftEdge/edge-launcher/blob/108e63df0b4cb5cd9d5e45aa7a264690851ec51d/MIcrosoftEdgeLauncherCsharp/Program.cs
[Flags()]
[Flags]
public enum ActivateOptions
{
None = 0x00000000,
@@ -18,29 +18,32 @@ namespace Microsoft.Plugin.Program.Programs.ApplicationActivationHelper
NoSplashScreen = 0x00000004,
}
/// ApplicationActivationManager
[ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
// ApplicationActivationManager
[ComImport]
[Guid("2e941141-7f97-4756-ba1d-9decde894a3d")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationActivationManager
{
IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ActivateOptions options, [Out] out UInt32 processId);
IntPtr ActivateApplication([In] string appUserModelId, [In] string arguments, [In] ActivateOptions options, [Out] out uint processId);
IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId);
IntPtr ActivateForFile([In] string appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] string verb, [Out] out uint processId);
IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId);
IntPtr ActivateForProtocol([In] string appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out uint processId);
}
// Application Activation Manager Class
[ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")]
[ComImport]
[Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")]
public class ApplicationActivationManager : IApplicationActivationManager
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/]
public extern IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ActivateOptions options, [Out] out UInt32 processId);
public extern IntPtr ActivateApplication([In] string appUserModelId, [In] string arguments, [In] ActivateOptions options, [Out] out uint processId);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
public extern IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId);
public extern IntPtr ActivateForFile([In] string appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] string verb, [Out] out uint processId);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
public extern IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId);
public extern IntPtr ActivateForProtocol([In] string appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out uint processId);
}
}

View File

@@ -28,8 +28,10 @@ namespace Microsoft.Plugin.Program.Programs
{
apps.Add(manifestApp);
}
manifestApps.MoveNext();
}
return apps;
}
@@ -39,17 +41,20 @@ namespace Microsoft.Plugin.Program.Programs
{
Marshal.ThrowExceptionForHR((int)hr);
}
return result;
}
}
// Reference : https://stackoverflow.com/questions/32122679/getting-icon-of-modern-windows-app-from-a-desktop-application
[Guid("5842a140-ff9f-4166-8f5c-62f5b7b0c781"), ComImport]
[Guid("5842a140-ff9f-4166-8f5c-62f5b7b0c781")]
[ComImport]
public class AppxFactory
{
}
[Guid("BEB94909-E451-438B-B5A7-D79E767B75D8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("BEB94909-E451-438B-B5A7-D79E767B75D8")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppxFactory
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores", Justification = "Implements COM Interface")]
@@ -58,7 +63,8 @@ namespace Microsoft.Plugin.Program.Programs
IAppxManifestReader CreateManifestReader(IStream inputStream);
}
[Guid("4E1BD148-55A0-4480-A3D1-15544710637C"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("4E1BD148-55A0-4480-A3D1-15544710637C")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppxManifestReader
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores", Justification = "Implements COM Interface")]
@@ -72,7 +78,8 @@ namespace Microsoft.Plugin.Program.Programs
IAppxManifestApplicationsEnumerator GetApplications();
}
[Guid("9EB8A55A-F04B-4D0D-808D-686185D4847A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("9EB8A55A-F04B-4D0D-808D-686185D4847A")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppxManifestApplicationsEnumerator
{
IAppxManifestApplication GetCurrent();
@@ -82,7 +89,8 @@ namespace Microsoft.Plugin.Program.Programs
bool MoveNext();
}
[Guid("5DA89BF4-3773-46BE-B650-7E744863B7E8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("5DA89BF4-3773-46BE-B650-7E744863B7E8")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppxManifestApplication
{
[PreserveSig]
@@ -92,7 +100,8 @@ namespace Microsoft.Plugin.Program.Programs
Hresult GetAppUserModelId([MarshalAs(UnmanagedType.LPWStr)] out string value);
}
[Guid("03FAF64D-F26F-4B2C-AAF7-8FE7789B8BCA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("03FAF64D-F26F-4B2C-AAF7-8FE7789B8BCA")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppxManifestProperties
{
[PreserveSig]

View File

@@ -13,6 +13,5 @@ namespace Microsoft.Plugin.Program.Programs
string Arguments { get; set; }
bool hasArguments { get; set; }
}
}

View File

@@ -17,13 +17,11 @@ namespace Microsoft.Plugin.Program.Programs
public PackageCatalogWrapper()
{
//Opens the catalog of packages that is available for the current user.
// Opens the catalog of packages that is available for the current user.
_packageCatalog = PackageCatalog.OpenForCurrentUser();
}
//
// Summary:
// Indicates that an app package is installing.
// Summary: Indicates that an app package is installing.
public event TypedEventHandler<PackageCatalog, PackageInstallingEventArgs> PackageInstalling
{
add
@@ -37,9 +35,7 @@ namespace Microsoft.Plugin.Program.Programs
}
}
//
// Summary:
// Indicates that an app package is uninstalling.
// Summary: Indicates that an app package is uninstalling.
public event TypedEventHandler<PackageCatalog, PackageUninstallingEventArgs> PackageUninstalling
{
add
@@ -53,9 +49,7 @@ namespace Microsoft.Plugin.Program.Programs
}
}
//
// Summary:
// Indicates that an app package is updating.
// Summary: Indicates that an app package is updating.
public event TypedEventHandler<PackageCatalog, PackageUpdatingEventArgs> PackageUpdating
{
add
@@ -68,6 +62,5 @@ namespace Microsoft.Plugin.Program.Programs
_packageCatalog.PackageUpdating -= value;
}
}
}
}

View File

@@ -37,7 +37,7 @@ namespace Microsoft.Plugin.Program.Programs
public static PackageWrapper GetWrapperFromPackage(Package package)
{
if(package == null)
if (package == null)
{
throw new ArgumentNullException(nameof(package));
}
@@ -55,7 +55,7 @@ namespace Microsoft.Plugin.Program.Programs
package.Id.FullName,
package.Id.FamilyName,
package.IsFramework,
package.IsDevelopmentMode,
package.IsDevelopmentMode,
string.Empty);
}
@@ -67,7 +67,6 @@ namespace Microsoft.Plugin.Program.Programs
package.IsDevelopmentMode,
path
);
}
}
}

View File

@@ -13,7 +13,7 @@ namespace Microsoft.Plugin.Program.Programs
{
public class ShellLinkHelper : IShellLinkHelper
{
[Flags()]
[Flags]
private enum SLGP_FLAGS
{
SLGP_SHORTPATH = 0x1,
@@ -38,7 +38,7 @@ namespace Microsoft.Plugin.Program.Programs
public string cAlternateFileName;
}
[Flags()]
[Flags]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores", Justification = "Represents flags specified in IShellLink interface")]
public enum SLR_FLAGS
{
@@ -53,59 +53,79 @@ namespace Microsoft.Plugin.Program.Programs
}
// Reference : http://www.pinvoke.net/default.aspx/Interfaces.IShellLinkW
/// The IShellLink interface allows Shell links to be created, modified, and resolved
[ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
// The IShellLink interface allows Shell links to be created, modified, and resolved
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("000214F9-0000-0000-C000-000000000046")]
interface IShellLinkW
{
/// <summary>Retrieves the path and file name of a Shell link object</summary>
void GetPath([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, ref WIN32_FIND_DATAW pfd, SLGP_FLAGS fFlags);
void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, ref WIN32_FIND_DATAW pfd, SLGP_FLAGS fFlags);
/// <summary>Retrieves the list of item identifiers for a Shell link object</summary>
void GetIDList(out IntPtr ppidl);
/// <summary>Sets the pointer to an item identifier list (PIDL) for a Shell link object.</summary>
void SetIDList(IntPtr pidl);
/// <summary>Retrieves the description string for a Shell link object</summary>
void GetDescription([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
/// <summary>Sets the description for a Shell link object. The description can be any application-defined string</summary>
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
/// <summary>Retrieves the name of the working directory for a Shell link object</summary>
void GetWorkingDirectory([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
/// <summary>Sets the name of the working directory for a Shell link object</summary>
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
/// <summary>Retrieves the command-line arguments associated with a Shell link object</summary>
void GetArguments([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
/// <summary>Sets the command-line arguments for a Shell link object</summary>
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
/// <summary>Retrieves the hot key for a Shell link object</summary>
void GetHotkey(out short pwHotkey);
/// <summary>Sets a hot key for a Shell link object</summary>
void SetHotkey(short wHotkey);
/// <summary>Retrieves the show command for a Shell link object</summary>
void GetShowCmd(out int piShowCmd);
/// <summary>Sets the show command for a Shell link object. The show command sets the initial show state of the window.</summary>
void SetShowCmd(int iShowCmd);
/// <summary>Retrieves the location (path and index) of the icon for a Shell link object</summary>
void GetIconLocation([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
int cchIconPath, out int piIcon);
void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon);
/// <summary>Sets the location (path and index) of the icon for a Shell link object</summary>
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
/// <summary>Sets the relative path to the Shell link object</summary>
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
/// <summary>Attempts to find the target of a Shell link, even if it has been moved or renamed</summary>
void Resolve(ref Accessibility._RemotableHandle hwnd, SLR_FLAGS fFlags);
/// <summary>Sets the path and file name of a Shell link object</summary>
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
}
[ComImport(), Guid("00021401-0000-0000-C000-000000000046")]
[ComImport]
[Guid("00021401-0000-0000-C000-000000000046")]
private class ShellLink
{
}
// Contains the description of the app
public string description { get; set; } = String.Empty;
public string description { get; set; } = string.Empty;
// Contains the arguments to the app
public string Arguments { get; set; } = String.Empty;
public string Arguments { get; set; } = string.Empty;
public bool hasArguments { get; set; } = false;
@@ -122,21 +142,21 @@ namespace Microsoft.Plugin.Program.Programs
catch (System.IO.FileNotFoundException ex)
{
ProgramLogger.LogException($"|Win32| ShellLinkHelper.retrieveTargetPath | {path} | Path could not be retrieved", ex);
return String.Empty;
return string.Empty;
}
var hwnd = new _RemotableHandle();
var hwnd = default(_RemotableHandle);
((IShellLinkW)link).Resolve(ref hwnd, 0);
const int MAX_PATH = 260;
StringBuilder buffer = new StringBuilder(MAX_PATH);
var data = new WIN32_FIND_DATAW();
var data = default(WIN32_FIND_DATAW);
((IShellLinkW)link).GetPath(buffer, buffer.Capacity, ref data, SLGP_FLAGS.SLGP_SHORTPATH);
var target = buffer.ToString();
// To set the app description
if (!String.IsNullOrEmpty(target))
if (!string.IsNullOrEmpty(target))
{
buffer = new StringBuilder(MAX_PATH);
((IShellLinkW)link).GetDescription(buffer, MAX_PATH);
@@ -152,6 +172,7 @@ namespace Microsoft.Plugin.Program.Programs
hasArguments = true;
}
}
return target;
}
}

View File

@@ -81,14 +81,15 @@ namespace Microsoft.Plugin.Program.Programs
else
{
var e = Marshal.GetExceptionForHR((int)hResult);
ProgramLogger.LogException($"|UWP|InitializeAppInfo|{path}" +
ProgramLogger.LogException(
$"|UWP|InitializeAppInfo|{path}" +
"|Error caused while trying to get the details of the UWP program", e);
Apps = new List<UWPApplication>().ToArray();
}
}
/// http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx
// http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx
private static string[] XmlNamespaces(string path)
{
XDocument z = XDocument.Load(path);
@@ -130,7 +131,8 @@ namespace Microsoft.Plugin.Program.Programs
}
}
ProgramLogger.LogException($"|UWP|XmlNamespaces|{Location}" +
ProgramLogger.LogException(
$"|UWP|XmlNamespaces|{Location}" +
"|Trying to get the package version of the UWP program, but a unknown UWP appmanifest version "
+ $"{FullName} from location {Location} is returned.", new FormatException());
@@ -154,10 +156,12 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e)
{
ProgramLogger.LogException($"|UWP|All|{p.InstalledLocation}|An unexpected error occurred and "
ProgramLogger.LogException(
$"|UWP|All|{p.InstalledLocation}|An unexpected error occurred and "
+ $"unable to convert Package to UWP for {p.FullName}", e);
return Array.Empty<UWPApplication>();
}
return u.Apps;
}).ToArray();
@@ -189,8 +193,7 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e)
{
ProgramLogger.LogException("UWP", "CurrentUserPackages", $"id", "An unexpected error occurred and "
+ $"unable to verify if package is valid", e);
ProgramLogger.LogException("UWP", "CurrentUserPackages", $"id", "An unexpected error occurred and unable to verify if package is valid", e);
return false;
}
@@ -232,15 +235,14 @@ namespace Microsoft.Plugin.Program.Programs
[Flags]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1714:Flags enums should have plural names", Justification = "This name is consistent with the corresponding win32 flags: https://docs.microsoft.com/en-us/windows/win32/stg/stgm-constants ")]
public enum Stgm : Int64
public enum Stgm : long
{
Read = 0x00000000L,
}
public enum Hresult : Int32
public enum Hresult : int
{
Ok = 0x0,
}
}
}

View File

@@ -145,6 +145,7 @@ namespace Microsoft.Plugin.Program.Programs
}
);
}
contextMenus.Add(
new ContextMenuResult
{
@@ -263,6 +264,7 @@ namespace Microsoft.Plugin.Program.Programs
}
}
}
return false;
}
@@ -305,7 +307,8 @@ namespace Microsoft.Plugin.Program.Programs
}
else
{
ProgramLogger.LogException($"|UWP|ResourceFromPri|{Package.Location}|Can't load null or empty result "
ProgramLogger.LogException(
$"|UWP|ResourceFromPri|{Package.Location}|Can't load null or empty result "
+ $"pri {source} in uwp location {Package.Location}", new NullReferenceException());
return string.Empty;
}
@@ -368,7 +371,6 @@ namespace Microsoft.Plugin.Program.Programs
// windows 10 https://msdn.microsoft.com/en-us/library/windows/apps/dn934817.aspx
// windows 8.1 https://msdn.microsoft.com/en-us/library/windows/apps/hh965372.aspx#target_size
// windows 8 https://msdn.microsoft.com/en-us/library/windows/apps/br211475.aspx
string path;
if (uri.Contains("\\", StringComparison.Ordinal))
{
@@ -440,7 +442,8 @@ namespace Microsoft.Plugin.Program.Programs
}
else
{
ProgramLogger.LogException($"|UWP|LogoPathFromUri|{Package.Location}" +
ProgramLogger.LogException(
$"|UWP|LogoPathFromUri|{Package.Location}" +
$"|{UserModelId} can't find logo uri for {uri} in package location: {Package.Location}", new FileNotFoundException());
return string.Empty;
}
@@ -448,7 +451,8 @@ namespace Microsoft.Plugin.Program.Programs
}
else
{
ProgramLogger.LogException($"|UWP|LogoPathFromUri|{Package.Location}" +
ProgramLogger.LogException(
$"|UWP|LogoPathFromUri|{Package.Location}" +
$"|Unable to find extension from {uri} for {UserModelId} " +
$"in package location {Package.Location}", new FileNotFoundException());
return string.Empty;
@@ -479,7 +483,8 @@ namespace Microsoft.Plugin.Program.Programs
}
else
{
ProgramLogger.LogException($"|UWP|ImageFromPath|{path}" +
ProgramLogger.LogException(
$"|UWP|ImageFromPath|{path}" +
$"|Unable to get logo for {UserModelId} from {path} and" +
$" located in {Package.Location}", new FileNotFoundException());
return new BitmapImage(new Uri(ImageLoader.ErrorIconPath));
@@ -491,5 +496,4 @@ namespace Microsoft.Plugin.Program.Programs
return $"{DisplayName}: {Description}";
}
}
}

View File

@@ -41,7 +41,7 @@ namespace Microsoft.Plugin.Program.Programs
public string ExecutableName { get; set; }
public string Description { get; set; } = String.Empty;
public string Description { get; set; } = string.Empty;
public bool Valid { get; set; }
@@ -49,14 +49,14 @@ namespace Microsoft.Plugin.Program.Programs
public bool hasArguments { get; set; } = false;
public string Arguments { get; set; } = String.Empty;
public string Arguments { get; set; } = string.Empty;
public string Location => ParentDirectory;
public uint AppType { get; set; }
// Wrappers for File Operations
public static IFileVersionInfoWrapper FileVersionInfoWrapper { get; set;} = new FileVersionInfoWrapper();
public static IFileVersionInfoWrapper FileVersionInfoWrapper { get; set; } = new FileVersionInfoWrapper();
public static IFileWrapper FileWrapper { get; set; } = new FileWrapper();
@@ -126,6 +126,7 @@ namespace Microsoft.Plugin.Program.Programs
nameContainsQuery = true;
}
}
return pathContainsQuery && !nameContainsQuery;
}
@@ -150,7 +151,7 @@ namespace Microsoft.Plugin.Program.Programs
}
else
{
return String.Empty;
return string.Empty;
}
}
@@ -167,7 +168,7 @@ namespace Microsoft.Plugin.Program.Programs
public Result Result(string query, IPublicAPI api)
{
if(api == null)
if (api == null)
{
throw new ArgumentNullException(nameof(api));
}
@@ -219,7 +220,7 @@ namespace Microsoft.Plugin.Program.Programs
},
};
// To set the title for the result to always be the name of the application
// To set the title for the result to always be the name of the application
result.Title = Name;
result.TitleHighlightData = StringMatcher.FuzzySearch(query, Name).MatchData;
@@ -336,7 +337,8 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException)
{
ProgramLogger.LogException($"|Win32|Win32Program|{path}" +
ProgramLogger.LogException(
$"|Win32|Win32Program|{path}" +
$"|Permission denied when trying to load the program from {path}", e);
return new Win32Program() { Valid = false, Enabled = false };
@@ -401,7 +403,8 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException)
{
ProgramLogger.LogException($"|Win32|InternetShortcutProgram|{path}" +
ProgramLogger.LogException(
$"|Win32|InternetShortcutProgram|{path}" +
$"|Permission denied when trying to load the program from {path}", e);
return new Win32Program() { Valid = false, Enabled = false };
@@ -445,13 +448,16 @@ namespace Microsoft.Plugin.Program.Programs
}
}
}
return program;
}
//Only do a catch all in production. This is so make developer aware of any unhandled exception and add the exception handling in.
//Error caused likely due to trying to get the description of the program
}
// Only do a catch all in production. This is so make developer aware of any unhandled exception and add the exception handling in.
// Error caused likely due to trying to get the description of the program
catch (Exception e)
{
ProgramLogger.LogException($"|Win32|LnkProgram|{path}" +
ProgramLogger.LogException(
$"|Win32|LnkProgram|{path}" +
"|An unexpected error occurred in the calling method LnkProgram", e);
program.Valid = false;
@@ -475,7 +481,8 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException)
{
ProgramLogger.LogException($"|Win32|ExeProgram|{path}" +
ProgramLogger.LogException(
$"|Win32|ExeProgram|{path}" +
$"|Permission denied when trying to load the program from {path}", e);
return new Win32Program() { Valid = false, Enabled = false };
@@ -524,7 +531,6 @@ namespace Microsoft.Plugin.Program.Programs
{
return null;
}
}
private static IEnumerable<string> ProgramPaths(string directory, IList<string> suffixes, bool recursiveSearch = true)
@@ -551,14 +557,16 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (DirectoryNotFoundException e)
{
ProgramLogger.LogException($"|Win32|ProgramPaths|{currentDirectory}" +
ProgramLogger.LogException(
$"|Win32|ProgramPaths|{currentDirectory}" +
"|The directory trying to load the program from does not exist", e);
}
}
}
catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException)
{
ProgramLogger.LogException($"|Win32|ProgramPaths|{currentDirectory}" +
ProgramLogger.LogException(
$"|Win32|ProgramPaths|{currentDirectory}" +
$"|Permission denied when trying to load programs from {currentDirectory}", e);
}
@@ -577,7 +585,8 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException)
{
ProgramLogger.LogException($"|Win32|ProgramPaths|{currentDirectory}" +
ProgramLogger.LogException(
$"|Win32|ProgramPaths|{currentDirectory}" +
$"|Permission denied when trying to load programs from {currentDirectory}", e);
}
} while (folderQueue.Any());
@@ -627,7 +636,7 @@ namespace Microsoft.Plugin.Program.Programs
// To get all the locations stored in the PATH env variable
var pathEnvVariable = Environment.GetEnvironmentVariable("PATH");
string[] searchPaths = pathEnvVariable.Split(Path.PathSeparator);
IEnumerable<String> toFilterAllPaths = new List<String>();
IEnumerable<string> toFilterAllPaths = new List<string>();
bool isRecursiveSearch = true;
foreach (string path in searchPaths)
@@ -714,6 +723,7 @@ namespace Microsoft.Plugin.Program.Programs
programs.AddRange(GetProgramsFromRegistry(root));
}
}
using (var root = Registry.CurrentUser.OpenSubKey(appPaths))
{
if (root != null)
@@ -761,7 +771,8 @@ namespace Microsoft.Plugin.Program.Programs
}
catch (Exception e) when (e is SecurityException || e is UnauthorizedAccessException)
{
ProgramLogger.LogException($"|Win32|GetProgramPathFromRegistrySubKeys|{path}" +
ProgramLogger.LogException(
$"|Win32|GetProgramPathFromRegistrySubKeys|{path}" +
$"|Permission denied when trying to load the program from {path}", e);
return string.Empty;
@@ -810,6 +821,7 @@ namespace Microsoft.Plugin.Program.Programs
&& app1.ExecutableName.Equals(app2.ExecutableName, StringComparison.OrdinalIgnoreCase)
&& app1.FullPath.Equals(app2.FullPath, StringComparison.OrdinalIgnoreCase);
}
return false;
}
@@ -830,7 +842,7 @@ namespace Microsoft.Plugin.Program.Programs
}
// Deduplication code
public static Win32Program[] DeduplicatePrograms(ParallelQuery<Win32Program> programs)
public static Win32Program[] DeduplicatePrograms(ParallelQuery<Win32Program> programs)
{
var uniqueExePrograms = programs.Where(x => !(string.IsNullOrEmpty(x.LnkResolvedPath) && (Extension(x.FullPath) == ExeExtension) && !(x.AppType == (uint)ApplicationTypes.RUN_COMMAND)));
var uniquePrograms = uniqueExePrograms.Distinct(new removeDuplicatesComparer());

View File

@@ -48,10 +48,10 @@ namespace Microsoft.Plugin.Program.Storage
}
}
}
//InitializeAppInfo will throw if there is no AppxManifest.xml for the package.
//Note there are sometimes multiple packages per product and this doesn't necessarily mean that we haven't found the app.
//eg. "Could not find file 'C:\\Program Files\\WindowsApps\\Microsoft.WindowsTerminalPreview_2020.616.45.0_neutral_~_8wekyb3d8bbwe\\AppxManifest.xml'."
// InitializeAppInfo will throw if there is no AppxManifest.xml for the package.
// Note there are sometimes multiple packages per product and this doesn't necessarily mean that we haven't found the app.
// eg. "Could not find file 'C:\\Program Files\\WindowsApps\\Microsoft.WindowsTerminalPreview_2020.616.45.0_neutral_~_8wekyb3d8bbwe\\AppxManifest.xml'."
catch (System.IO.FileNotFoundException e)
{
ProgramLogger.LogException($"|UWP|OnPackageInstalling|{args.Package.InstalledLocation}|{e.Message}", e);
@@ -63,7 +63,7 @@ namespace Microsoft.Plugin.Program.Storage
{
if (args.Progress == 0)
{
//find apps associated with this package.
// find apps associated with this package.
var packageWrapper = PackageWrapper.GetWrapperFromPackage(args.Package);
var uwp = new UWP(packageWrapper);
var apps = Items.Where(a => a.Package.Equals(uwp)).ToArray();

View File

@@ -60,10 +60,10 @@ namespace Microsoft.Plugin.Program.Storage
{
_fileSystemWatchers[index].Dispose();
}
_disposed = true;
}
}
}
}
}

View File

@@ -151,6 +151,7 @@ namespace Microsoft.Plugin.Program.Storage
return app;
}
}
return null;
}
@@ -165,6 +166,7 @@ namespace Microsoft.Plugin.Program.Storage
return app;
}
}
return null;
}
@@ -210,6 +212,5 @@ namespace Microsoft.Plugin.Program.Storage
var items = _storage.TryLoad(Array.Empty<Win32Program>());
Set(items);
}
}
}

View File

@@ -117,7 +117,7 @@ namespace Microsoft.Plugin.Program.Views.Commands
if (selectedItems.Where(t1 => t1.Enabled).Any())
return true;
// ProgramSources holds list of user added directories,
// ProgramSources holds list of user added directories,
// so when we enable/disable we need to reindex to show/not show the programs
// that are found in those directories.
if (selectedItems.Where(t1 => Main._settings.ProgramSources.Any(x => t1.UniqueIdentifier == x.UniqueIdentifier)).Any())

View File

@@ -28,7 +28,7 @@ namespace Microsoft.Plugin.Program.Views
private ListSortDirection _lastDirection;
// We do not save all program sources to settings, so using
// this as temporary holder for displaying all loaded programs sources.
// this as temporary holder for displaying all loaded programs sources.
internal static List<ProgramSource> ProgramSettingDisplayList { get; set; }
public ProgramSetting(PluginInitContext context, ProgramPluginSettings settings)