bounty将在2天后过期。回答此问题可获得+100声望奖励。JaSHin希望引起更多人关注此问题。
在我通过Desktop Bridge打包的WPF应用程序中,我发现了一个问题,有些用户无法通过应用内购买购买插件。它显示我的“已取消”警报,表示StorePurchaseStatus.NotPurchased
,其中result.ExtendedError
是null
。
目标框架是:
<TargetFramework>net7.0-windows10.0.19041.0</TargetFramework>
下面是采购的简化代码:
namespace MyApp {
public partial class MainWindow: Window {
private readonly StoreContext context;
public MainWindow(){
context = StoreContext.GetDefault();
}
private bool IsAdministrator()
{
var identity = WindowsIdentity.GetCurrent();
var principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
private async void BuyButtonClick(object sender, RoutedEventArgs e) {
if (IsAdministrator())
{
ShowAlert("Cannot run under administrator rights");
return;
}
if (sender is Button button)
{
StoreProduct? storeProduct = ((Product)dataContext).storeProduct;
if (storeProduct != null)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(async delegate
{
var hwnd = new WindowInteropHelper(this).Handle;
WinRT.Interop.InitializeWithWindow.Initialize(context, hwnd);
var result = await context.RequestPurchaseAsync(storeProduct.StoreId);
switch (result.Status)
{
case StorePurchaseStatus.Succeeded:
ShowAlert("Succeeded");
break;
case StorePurchaseStatus.AlreadyPurchased:
ShowAlert("AlreadyPurchased");
break;
case StorePurchaseStatus.NotPurchased:
var extendedError = result.ExtendedError;
if (extendedError != null)
{
ShowAlert(extendedError.Message);
}
else
{
ShowAlert("Canceled");
}
break;
case StorePurchaseStatus.NetworkError:
ShowAlert("NetworkError");
break;
case StorePurchaseStatus.ServerError:
ShowAlert("ServerError");
break;
}
}
}
}
}
}
它在我的设备(Windows 11和Windows 10)上到处都能用,不能购买的用户有Windows 11。
1条答案
按热度按时间ogq8wdun1#
这可能是由客户使用的帐户类型引起的。
首先,如果应用程序以管理员身份运行,商店购买将失败。
普通的“管理员”账户(管理员组中有一个分割令牌的人)只会以标准用户的身份运行桌面桥应用程序,除非他们右键单击并启动显式提升的内容。
但如果客户在其设备上使用系统内置帐户,则购买将失败,因为应用将以管理员身份运行。Microsoft应用商店购买API不允许这样做。