gpt4 book ai didi

C++/WinRT UWP-HRESULT 0x80073D54 : The process has no package identity

转载 作者:行者123 更新时间:2023-12-02 10:02:23 30 4
gpt4 key购买 nike

我正在为 UWP 使用 C++/WinRT。我正在尝试创建一个文件,但在第 11 行抛出异常:

#include "pch.h"

using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Storage;

IAsyncAction createFile()
{
try
{
StorageFolder local{ ApplicationData::Current().LocalFolder() }; // line 11
StorageFolder folder = co_await local.CreateFolderAsync(L"myapp", CreationCollisionOption::OpenIfExists);
StorageFile file = co_await folder.CreateFileAsync(L"file", CreationCollisionOption::ReplaceExisting);

co_await FileIO::WriteTextAsync(file, L"wide chars here.");
}
catch (const winrt::hresult_error& ex)
{

}
}

int main()
{
init_apartment();
createFile();
}

调试器没有向我显示错误,因为它崩溃了。输出说
onecoreuap\base\appmodel\statemanager\winrt\lib\windows.storage.applicationdatafactory.server.cpp(126)\Windows.Storage.ApplicationData.dll!00007FFE8A7A1202: (caller: 00007FFE8A799081) ReturnHr(1) tid(3ad8) 80073D54 The process has no package identity.
onecoreuap\base\appmodel\statemanager\winrt\lib\windows.storage.applicationdatafactory.server.cpp(74)\Windows.Storage.ApplicationData.dll!00007FFE8A7990A9: (caller: 00007FF733954323) ReturnHr(2) tid(3ad8) 80073D54 The process has no package identity.
Debug Error!

Program: D:\Developpement\CPP\test\x64\Debug\Tests.exe

abort() has been called

我在谷歌上一无所获,那么这个错误是什么意思,我该如何解决?谢谢

最佳答案

这里的问题在于 ApplicationData::Current()。
https://docs.microsoft.com/en-us/uwp/api/windows.storage.applicationdata.current?view=winrt-18362

获取当前应用程序信息的 API 基于应用程序的身份。任何 Windows 应用都可以具有标识(它不必是 UWP),但必须使用打包的安装程序来安装它(也称为 MSIX 安装程序)。您可以在此处了解有关打包的“完全信任”应用程序的更多信息:
https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-prepare

您可以在此处使用桌面应用程序打包项目,以便更轻松地打包您的应用程序:
https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-packaging-dot-net

综上所述,如果您只想在应用程序本地数据中打开一个文件,而不涉及打包问题,您可以根据 %appdata% 的位置创建文件夹。如果没有打包的安装程序,您有责任处理清理工作。

因此,在短期内将您的应用程序设置为打包应用程序需要更多的工作,但如果这是您想要分发的内容,那么从长远来看,提前处理好这件事可能会为您节省大量工作。

如果您想手动设置应用程序文件夹,您可以按照以下方式开始:

int main()
{
init_apartment();

wstring appfolderstring;
appfolderstring.resize(ExpandEnvironmentStrings(L"%AppData%", nullptr, 0));
ExpandEnvironmentStringsW(L"%AppData%", &appfolderstring.front(), appfolderstring.size());
wprintf(L"path: %ls!\n", appfolderstring.c_str());

// Note: off-by-one issue... ExpandEnvironmentStringsW wants to write the final null character.
// Leave buffer space to write it above, then trim it off here.
appfolderstring.resize(appfolderstring.size()-1);

StorageFolder folder{ StorageFolder::GetFolderFromPathAsync(appfolderstring).get() };
printf("folder: %ls!\n", folder.DisplayName().c_str());
}

关于C++/WinRT UWP-HRESULT 0x80073D54 : The process has no package identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61991232/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com