【问题标题】:Windows Storage Error with Windows Application Packaging ProjectWindows 应用程序打包项目的 Windows 存储错误
【发布时间】:2020-10-21 18:00:10
【问题描述】:

我将空白 UWP 项目打包到 Windows 应用程序打包项目中。

两个项目都有:

  • 目标版本 Windows 10 版本 1903(10.0;内部版本 18362)
  • 最低版本 Windows 10 版本 1809(10.0;内部版本 17763)

我在App.xaml.cs中写了一个简单的代码来创建设置值

using Windows.Storage;
...
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    ApplicationDataContainer Sett = ApplicationData.Current.LocalSettings;
    if (Sett.Values["test"] == null)
        {
            Sett.Values["test"] = true;
        }
    // Sett.Values["test"] = true; // Also causes an error
    ...
}

当我运行 TestPkg(x86 调试)时,我在调试控制台中收到此消息

onecoreuap\base\appmodel\statemanager\winrt\lib\windows.storage.applicationdatafactory.server.cpp(235)\Windows.Storage.ApplicationData.dll!7B6D1391: (caller: 05769996) ReturnHr(1) tid(546c) 8000000B The operation attempted to access data outside the valid range
Msg:[User XXX]

正确保存的值我可以毫无问题地读取它。 仅当您将 UWP 打包到 Windows 应用程序打包项目时才会出现此错误。

我也在这两种情况下都使用 windows.fullTrustProcess (UWP + WPF) 进行了尝试。在这两种情况下,行为都是相似的。

我该如何解决这个问题? 来源:https://github.com/steam3d/Windows.Storage.Error

【问题讨论】:

  • 我已经制作了测试示例来测试上面的代码,但是我无法重现这个问题,你能不能给我们分享一个迷你演示?
  • 我已经测试了你的代码示例,它抛出异常,我尝试删除应用程序引用并重新添加包。它按预期工作。
  • 我尝试重新添加 Windows 应用程序打包项目,但总是收到此错误
  • 能否尝试清理解决方案并删除 bin 和 obj 文件夹?

标签: c# uwp packaging


【解决方案1】:

我也看到了这个错误。我正在使用 VS 2019。 以下是有关该问题的更多数据点。也许他们会提供线索。

  1. 我一直注释掉我的应用初始化代码,最终发现只有一条语句 var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 会产生错误“该操作试图访问有效范围之外的数据”

  2. 在我的应用程序初始化后,我在写入 localSettings 之前使用上面的语句。在这种情况下,我收到一个不同的错误“端点映射器没有更多可用的端点。”

  3. 这似乎是实时相关的。在我的应用程序的一个用例中,我每 5 秒发出一次上述语句。在这种情况下,我在总秒数为 5、15、25 等时收到错误“没有更多端点...”,但在总秒数为 10、20、30 等时却没有。 如果我在语句处设置断点并放慢速度,那么每次都会出现错误,如 5、10、15、20、25 等。

【讨论】:

  • 我也注意到了这一点。我很担心。如果我创建带有此警告的应用程序,我的客户会遇到问题吗?
  • 好消息,有点。我将我的开发环境移到了一台较新的机器上,消息消失了——“超出有效范围”和“不再有端点”消息。这台旧机器大约有 6 年的历史,已经从 Windows 7 升级到了 Windows 10。也许 Windows 7 中还有什么不好的东西。
  • 但这不是好的解决方案。如果您再次遇到此错误,则必须重新安装 Windows。
【解决方案2】:

我在使用带有 MSIX 中打包的桌面应用程序的 WinUI 3 Preview 3 时遇到了类似的错误。

在我的情况下,异常发生在启动期间的某个时间。我确实有访问 Windows.Storage.ApplicationData 的代码。

我在调试器中看到的异常被复制到下面并带有源代码行。

onecoreuap\base\appmodel\statemanager\winrt\lib\windows.storage.applicationdatafactory.server.cpp(235)\Windows.Storage.ApplicationData.dll!16891391:(调用者:0E7F9FB1)ReturnHr(1) tid(33bc ) 8000000B 该操作试图访问有效范围之外的数据 消息:[用户 S-1-5-21-3122765350-3099923779-1351685958-1002] 在 Q5U.exe 中的 0x7679A892 (KernelBase.dll) 处引发异常:0x40080202:WinRT 转换错误(参数:0x8000000B、0x80070490、0x00000014、0x005BE3F4)。 OnLaunched(种类=启动)

【讨论】:

    【解决方案3】:

    检查下面的代码可能会解决

    ApplicationDataContainer Sett = ApplicationData.Current.LocalSettings;
    var value = Sett.Values["#Test"];
     
    if (value == null)
    {
       Sett.Values["#Test"] = 5;
    }

    【讨论】:

    • 不幸的是它没有帮助。但是“#”是什么意思?
    • sn-p 在执行时抛出(至少对我而言)异常。
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多