使用.NET MAUI开发Windows和Mac桌面应用时访问本地资源的方法
.NET MAUI桌面应用:本地硬盘访问与CLI调用指南
一、本地硬盘文件夹访问权限
Windows平台
- .NET MAUI Windows应用基于WinUI 3,分两种场景:
- 打包应用(MSIX):默认仅能访问Documents、Pictures等用户常用文件夹。若需访问任意文件夹,需在
Package.appxmanifest中添加broadFileSystemAccess权限:
该权限需要用户在系统设置中手动授予,且发布到Microsoft Store的应用需经过额外审核。<Capabilities> <rescap:Capability Name="broadFileSystemAccess" /> </Capabilities> - 未打包应用(EXE):不受UWP权限限制,和传统WinForms/WPF应用一致,只要当前用户拥有系统权限,就能访问本地所有文件夹。
- 打包应用(MSIX):默认仅能访问Documents、Pictures等用户常用文件夹。若需访问任意文件夹,需在
Mac平台
- Mac应用遵循沙箱机制,默认仅能访问应用沙箱内文件,以及用户通过文件选择器手动授权的文件夹。
- 若需访问任意文件夹:
- 在
Info.plist中添加权限说明,例如全磁盘访问的描述:<key>NSFileSystemUsageDescription</key> <string>需要访问磁盘文件以完成数据处理</string> - 用户需在系统偏好设置→安全与隐私→隐私→全磁盘访问中,手动开启应用的权限。
- 在
- 发布到Mac App Store的应用建议优先通过用户手动选择文件/文件夹的方式获取授权,全磁盘权限的审核标准较为严格。
二、调用系统CLI应用
可通过System.Diagnostics.Process类实现跨平台CLI调用,以下是通用实现方案:
基础示例代码
using System.Diagnostics; async Task RunCliCommand() { // 替换为目标CLI路径和参数 string cliPath = "/usr/bin/ls"; // Mac示例;Windows示例:@"C:\Windows\System32\powershell.exe" string arguments = "-la"; // 示例参数 var startInfo = new ProcessStartInfo { FileName = cliPath, Arguments = arguments, RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true // Windows下隐藏CLI窗口 }; using var process = Process.Start(startInfo); if (process == null) return; string output = await process.StandardOutput.ReadToEndAsync(); string errorOutput = await process.StandardError.ReadToEndAsync(); await process.WaitForExitAsync(); // 处理输出结果 Console.WriteLine("CLI输出:"); Console.WriteLine(output); if (!string.IsNullOrEmpty(errorOutput)) { Console.WriteLine("错误信息:"); Console.WriteLine(errorOutput); } }
平台注意事项
- Windows:系统内置CLI(如cmd、powershell)可直接使用文件名(系统会自动在PATH中查找);第三方CLI建议使用完整路径。若调用需要管理员权限的CLI,需确保应用以管理员身份运行。
- Mac:通过终端
which <cli-name>命令可获取CLI的完整路径;沙箱应用调用系统CLI通常无权限问题,调用第三方CLI需确保应用有权限访问其所在目录,或通过用户手动授权解决。
内容的提问来源于stack exchange,提问作者Satyajit
相关产品推荐
相关产品推荐

