You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3应用调试/发布正常,侧载/商店发布后遇权限异常

WinUI 3应用侧载/商店安装后触发权限异常问题

问题现象

  • 应用在Debug(x32/x64)、Release模式下运行完全正常,但侧载安装或从商店下载运行时,触发权限拒绝异常:

Access to the path 'C:\Program Files\WindowsApps[PUBLISHERNAME].329567E69597C_1.0.12.0_x86__1wwrtwbj9qrjm\bpe' is denied.'.

  • 应用可正常启动并导航,异常由SendPrompt()方法触发

触发异常的方法代码

public async void SendPrompt()
{
    // Add to the conversation list
    Conversation.Add(new ChatMessage(UserPrompt, DateTime.UtcNow, Direction.User));

    // clear messsage
    UserPrompt = string.Empty;

    var dispatcher = Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();

    dispatcher.TryEnqueue(() =>
    {
        // set awaiting response bar
        IsAwaitingResponse = !IsAwaitingResponse;
    });

    // create open AI response
    UserPrompt prompt = null;

    switch (chatSettings.OpenAiType)
    {
        case OpenAiType.API:
            prompt = oAiService.OpenAiCreatePrompt(
                SystemMessage,
                Conversation.GetRange(conversationStartingIndex,
                Conversation.Count - conversationStartingIndex).ToList(),
                chatSettings.ChatDefaults.MaxTokenLength,
                TemperatureValue,
                MaxTokenLength,
                TopP,
                FrequencyPenalty,
                PresencePenalty,
                null);
            break;
        case OpenAiType.AZURE:
            prompt = oAiService.AzureCreatePrompt(SystemMessage,
                Conversation.GetRange(conversationStartingIndex,
                Conversation.Count - conversationStartingIndex).ToList(),
                chatSettings.ChatDefaults.MaxTokenLength,
                TemperatureValue,
                MaxTokenLength,
                TopP,
                FrequencyPenalty,
                PresencePenalty,
                new string[] { "<|im_end|>" });
            break;
    }

    if (prompt != null)
    {
        conversationStartingIndex = prompt.ConversationStartingIndex;
        var response = new BaseGPTResponse();
        switch (chatSettings.OpenAiType)
        {
            case OpenAiType.API:
                response = await oAiService.CompletionCreateAsync<ChatGPTOpenAiResponse>(prompt.Content);
                break;
            case OpenAiType.AZURE:
                response = await oAiService.CompletionCreateAsync<ChatGPTAzureResponse>(prompt.Content);
                break;
        }

        ChatMessage? chatMessage = null;
        if (response.hasErrored)
        {
            // record response from chatGPT
            Conversation.Add(new ChatMessage($"Error processing message: {response.errorResponse}", DateTime.UtcNow, Direction.Assistant, response.hasErrored));
        }
        else
        {
            // create chat message specific to settings type in use.
            var botResponse = string.Empty;
            switch (chatSettings.OpenAiType)
            {
                case OpenAiType.API:
                    botResponse = (response as ChatGPTOpenAiResponse)?.choices[0].message.content;
                    break;
                case OpenAiType.AZURE:
                    botResponse = (response as ChatGPTAzureResponse)?.choices[0].text;
                    break;
            }

            // record response from chatGPT
            Conversation.Add(new ChatMessage(botResponse, DateTime.UtcNow, Direction.Assistant, response.hasErrored));
        }

        // save/overwrite conversation data.
        await UpdateConversationStores();
    }
}

疑似风险操作

  • 服务中使用HttpClient发起Post请求
  • 通过辅助类从LocalSettings读取目录路径数据
  • 在Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)指向的目录存储/覆盖文件,该路径为重定向路径,与调试时路径不同
  • 已确认应用可写入该目录,Maps文件夹下已有成功写入的文件

实际使用的文件路径

  • C:\Users[USERNAME]\AppData\Local\Packages[PUBLISHERNAME].329567E69597C_1wwrtwbj9qrjm\LocalCache\Local[FOLDERNAME]\Conversations
  • C:\Users[USERNAME]\AppData\Local\Packages[PUBLISHERNAME].329567E69597C_1wwrtwbj9qrjm\LocalCache\Local[FOLDERNAME]\Maps

FileService类代码(WinUI Template Studio生成)

public class FileService : IFileService
{
    public T Read<T>(string folderPath, string fileName)
    {
        var path = Path.Combine(folderPath, fileName);
        if (File.Exists(path))
        {
            var json = File.ReadAllText(path);
            return JsonConvert.DeserializeObject<T>(json);
        }

        return default;
    }

    public void Save<T>(string folderPath, string fileName, T content)
    {
        if (!Directory.Exists(folderPath))
        {
            Directory.CreateDirectory(folderPath);
        }

        var fileContent = JsonConvert.SerializeObject(content);
        File.WriteAllText(Path.Combine(folderPath, fileName), fileContent, Encoding.UTF8);
    }

    public void Delete(string folderPath, string fileName)
    {
        if (fileName != null && File.Exists(Path.Combine(folderPath, fileName)))
        {
            File.Delete(Path.Combine(folderPath, fileName));
        }
    }
}

调试控制台输出

Exception thrown at 0x75557922 (KernelBase.dll) in [APPNAMESPACE].exe: 0xE0434352 (parameters: 0x80070005, 0x00000000, 0x00000000, 0x00000000, 0x797E0000).
onecore\com\combase\registrationstore\registrationstoredata.cpp(1055)\combase.dll!765BF0D5: (caller: 76581A4C) ReturnHr(407) tid(37590) 80070002 The system cannot find the file specified.
onecore\com\combase\registrationstore\registrationstoredata.cpp(1055)\combase.dll!765BF0D5: (caller: 76581A4C) ReturnHr(408) tid(37590) 80070002 The system cannot find the file specified.
Exception thrown at 0x75557922 (KernelBase.dll) in [APPNAMESPACE].exe: 0xE0434352 (parameters: 0x80070005, 0x00000000, 0x00000000, 0x00000000, 0x797E0000).
Exception thrown at 0x75557922 (KernelBase.dll) in [APPNAMESPACE].exe: WinRT originate error - 0x80070005 : 'Access to the path 'C:\Program Files\WindowsApps\[PUBLISHERNAME].329567E69597C_1.0.12.0_x86__1wwrtwbj9qrjm\bpe' is denied.'.
Unhandled exception at 0x0B791B70 (Microsoft.ui.xaml.dll) in [APPNAMESPACE].exe: 0xC000027B: An application-internal exception has occurred (parameters: 0x2102A6A0, 0x00000002).

内容的提问来源于stack exchange,提问作者JoeTomks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:47:02