如何让.NET MAUI应用关联特定扩展名文件实现双击打开?
.NET MAUI 实现双击特定扩展名文件启动应用并打开文件
一、Windows 平台配置(核心步骤)
1. 自动配置文件关联(通过安装包)
要让系统把你的应用和特定扩展名绑定,得在Windows注册表加配置,用WiX或者Inno Setup做安装包时自动完成:
- 先注册扩展名:比如要关联
.myext,就在HKEY_CLASSES_ROOT\.myext里把默认值设成你的应用ProgID(比如MyMauiApp.File) - 定义ProgID:在
HKEY_CLASSES_ROOT\MyMauiApp.File下设置默认值为文件类型的描述(比如“我的MAUI应用文件”),再建shell\open\command子项,默认值填你的MAUI应用路径加"%1"(引号不能少,用来处理带空格的文件路径) - 可选加图标:在ProgID下面建
DefaultIcon子项,默认值设成应用图标的路径
2. MAUI应用接收文件路径
在Windows项目的Platforms/Windows/App.xaml.cs里,重写OnLaunched方法来拿命令行里的文件路径:
protected override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); // 双击文件时,命令行第一个参数就是文件路径 if (!string.IsNullOrEmpty(args.Arguments)) { var filePath = args.Arguments.Trim('"'); // 去掉路径两端的引号 if (File.Exists(filePath)) { // 把文件路径传给主页面处理 if (App.Current.MainPage is MainPage mainPage) { mainPage.OpenFile(filePath); } } } }
然后在主页面加个OpenFile方法,写读取、展示文件内容的逻辑就行。
二、跨平台适配(如果要支持其他系统)
macOS
在Platforms/MacOS/Info.plist里加文件关联配置:
- 加
CFBundleDocumentTypes数组,指定CFBundleTypeName(文件类型名称)、LSHandlerRank设为Owner、LSItemContentTypes填自定义UTI(比如com.mymauiapp.myext) - 再加
UTExportedTypeDeclarations数组,定义这个自定义UTI的细节,包括UTTypeIdentifier、UTTypeTagSpecification里关联扩展名.myext
Android
在Platforms/Android/AndroidManifest.xml里加<intent-filter>,让应用能响应打开文件的请求:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file" /> <data android:mimeType="*/*" /> <data android:pathPattern=".*\\.myext" /> </intent-filter>
然后在MainActivity的OnCreate或者OnNewIntent方法里拿到文件Uri,处理打开逻辑。
三、注意点
- 安装完应用后,最好重启资源管理器或者注销再登录,确保注册表配置生效
- 如果应用已经在运行,Windows平台可以用
AppInstance.GetActivatedEventArgs()获取激活参数,处理新的文件打开请求 - macOS和Android的配置要严格遵循各自平台的规则,别写错权限和类型声明
内容的提问来源于stack exchange,提问作者Miodek
相关产品推荐
相关产品推荐

