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
相关产品推荐
相关产品推荐

