Fix for File Not Found exception while indexing invalid Package App (#4971)

* Catching file not found exception

* removed unnecessary header files

* Added a string.empty check for installed location

* reusing package wrapper instead of package installing event args
This commit is contained in:
Alekhya 2020-07-14 11:44:50 -07:00 committed by GitHub
parent 74412766fa
commit f59abe23c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 12 deletions

View File

@ -72,5 +72,23 @@ namespace Microsoft.Plugin.Program.UnitTests.Programs
Assert.AreEqual(applications.Length, 1); Assert.AreEqual(applications.Length, 1);
Assert.IsTrue(applications.FindAll(x => x.Name == "PackagedApp").Length > 0); Assert.IsTrue(applications.FindAll(x => x.Name == "PackagedApp").Length > 0);
} }
[Test]
public void PowerToysRun_ShouldNotAddInvalidApp_WhenIndexingUWPApplications()
{
// Arrange
PackageWrapper invalidPackagedApp = new PackageWrapper();
Main._settings = new Settings();
List<IPackage> packages = new List<IPackage>() {invalidPackagedApp };
var mock = new Mock<IPackageManager>();
mock.Setup(x => x.FindPackagesForCurrentUser()).Returns(packages);
UWP.PackageManagerWrapper = mock.Object;
// Act
var applications = UWP.All();
// Assert
Assert.AreEqual(applications.Length, 0);
}
} }
} }

View File

@ -1,20 +1,24 @@
using Package = Windows.ApplicationModel.Package; using Microsoft.Plugin.Program.Logger;
using System.IO;
using Package = Windows.ApplicationModel.Package;
namespace Microsoft.Plugin.Program.Programs namespace Microsoft.Plugin.Program.Programs
{ {
public class PackageWrapper : IPackage public class PackageWrapper : IPackage
{ {
public string Name { get; } public string Name { get; } = string.Empty;
public string FullName { get; } public string FullName { get; } = string.Empty;
public string FamilyName { get; } public string FamilyName { get; } = string.Empty;
public bool IsFramework { get; } public bool IsFramework { get; } = false;
public bool IsDevelopmentMode { get; } public bool IsDevelopmentMode { get; } = false;
public string InstalledLocation { get; } public string InstalledLocation { get; } = string.Empty;
public PackageWrapper() { }
public PackageWrapper(string Name, string FullName, string FamilyName, bool IsFramework, bool IsDevelopmentMode, string InstalledLocation) public PackageWrapper(string Name, string FullName, string FamilyName, bool IsFramework, bool IsDevelopmentMode, string InstalledLocation)
{ {
@ -28,7 +32,9 @@ namespace Microsoft.Plugin.Program.Programs
public static PackageWrapper GetWrapperFromPackage(Package package) public static PackageWrapper GetWrapperFromPackage(Package package)
{ {
return new PackageWrapper( try
{
return new PackageWrapper(
package.Id.Name, package.Id.Name,
package.Id.FullName, package.Id.FullName,
package.Id.FamilyName, package.Id.FamilyName,
@ -36,6 +42,12 @@ namespace Microsoft.Plugin.Program.Programs
package.IsDevelopmentMode, package.IsDevelopmentMode,
package.InstalledLocation.Path package.InstalledLocation.Path
); );
}
catch(FileNotFoundException ex)
{
ProgramLogger.LogException($"PackageWrapper", "GetWrapperFromPackage","package.InstalledLocation.Path",$"File Not Found for package {package.Id.Name}", ex);
return new PackageWrapper();
}
} }
} }
} }

View File

@ -35,11 +35,14 @@ namespace Microsoft.Plugin.Program.Storage
try try
{ {
var packageWrapper = PackageWrapper.GetWrapperFromPackage(args.Package); var packageWrapper = PackageWrapper.GetWrapperFromPackage(args.Package);
var uwp = new UWP(packageWrapper); if(!string.IsNullOrEmpty(packageWrapper.InstalledLocation))
uwp.InitializeAppInfo(args.Package.InstalledLocation.Path);
foreach (var app in uwp.Apps)
{ {
Add(app); var uwp = new UWP(packageWrapper);
uwp.InitializeAppInfo(packageWrapper.InstalledLocation);
foreach (var app in uwp.Apps)
{
Add(app);
}
} }
} }
//InitializeAppInfo will throw if there is no AppxManifest.xml for the package. //InitializeAppInfo will throw if there is no AppxManifest.xml for the package.