WindowsAppSDK icon indicating copy to clipboard operation
WindowsAppSDK copied to clipboard

PackageDeploymentManager.RegisterPackageAsync() fails while WinRT RegisterPackageByFullNameAsync() succeeds

Open whiskhub opened this issue 1 year ago • 0 comments

Describe the bug

PackageDeploymentManager.RegisterPackageAsync() fails to execute while the WinRT counterpart PackageManager.RegisterPackageByFullNameAsync() succeeds.

The WASDK method returns withPackageDeploymentStatus.CompletedFailure, but empty Error/ErrorText/ExtendedError properties. The console (with native debugging enabled) shows:

Exception thrown at 0x00007FFF613A83EA (KernelBase.dll) in PackageManagerRegisterTest.exe: WinRT originate error - 0x800706BE : 'The remote procedure call failed.'. Exception thrown at 0x00007FFF613A83EA (KernelBase.dll) in PackageManagerRegisterTest.exe: 0x000006BE: The remote procedure call failed. onecore\admin\appmodel\packagemanager\client\Helpers.hpp(235)\AppXDeploymentClient.dll!00007FFF596B31C8: (caller: 00007FFF596B562C) LogHr(1) tid(739c) 800706BE The remote procedure call failed. Exception thrown at 0x00007FFF613A83EA (KernelBase.dll) in PackageManagerRegisterTest.exe: WinRT originate error - 0x80070490 : 'Element not found.'.

The WinRT method succeeds and the package is registered and useable afterwards.

Steps to reproduce the bug

  1. Create a packaged app (e.g. WinUI 3)
  2. Stage a (signed, or self-signed in trusted certificate store) MSIX package:
var packageDeploymentManager = PackageDeploymentManager.GetDefault();
var options = new Microsoft.Windows.Management.Deployment.StagePackageOptions();
var uri = new Uri(@"C:\file_path_to_msix.msix");
var operation = packageDeploymentManager.StagePackageByUriAsync(uri, options);
var result = await operation;
  1. Register the package using full package name and WASDK:
var packageDeploymentManager = PackageDeploymentManager.GetDefault();
var options = new Microsoft.Windows.Management.Deployment.RegisterPackageOptions();
var operation = packageDeploymentManager.RegisterPackageAsync("MyPackage_1.0.0.123_x64__publisherid", options);
var result = await operation;
  1. Register the package using full package name and WinRT:
var packageManager = new PackageManager();
var operation = packageManager.RegisterPackageByFullNameAsync("MyPackage_1.0.0.123_x64__publisherid", [], DeploymentOptions.None);
var result = await operation;
  1. Verify the package was registered (e.g. see the app in start menu)

Expected behavior

RegisterPackageAsync() succeeds, same as the WinRT counterpart RegisterPackageByFullNameAsync().

Screenshots

No response

NuGet package version

Windows App SDK 1.6.1: 1.6.240923002

Packaging type

Packaged (MSIX)

Windows version

Windows 11 version 22H2 (22621, 2022 Update)

IDE

Visual Studio 2022

Additional context

No response

whiskhub avatar Oct 09 '24 17:10 whiskhub