在 Windows 应用中处理文件激活

你的应用可以注册为特定文件类型的默认处理程序。 Windows 桌面应用程序和通用 Windows 平台 (UWP) 应用都可以注册为默认文件处理程序。 如果用户选择应用作为特定文件类型的默认处理程序,则启动该类型的文件时,将激活你的应用。

如果希望处理该类型的文件的所有启动,建议仅注册文件类型。 如果应用只需要在内部使用文件类型,则无需注册为默认处理程序。 如果选择注册文件类型,则必须为最终用户提供为该文件类型激活应用时预期的功能。 例如,图片查看器应用可以注册以显示 .jpg 文件。 有关文件关联的详细信息,请参阅 文件类型和 URI指南。

这些步骤演示如何注册自定义文件类型 .alsdk,以及如何在用户启动 .alsdk 文件时激活应用。

注意

在 Windows 中,某些 URI 和文件扩展名保留供内置应用和作系统使用。 尝试使用保留 URI 或文件扩展名来注册应用程序的操作将被忽略。 请参阅 保留的 URI 方案名称和文件类型,了解您无法为应用注册的 URI 方案的字母顺序列表,因为它们是保留的或禁止的。

重要 API

本主题使用以下 API:

步骤 1:在包清单中指定扩展点

应用仅接收程序包清单中列出的文件扩展名的激活事件。 下面介绍如何指示应用使用 .alsdk 扩展名处理文件。

  1. 解决方案资源管理器中,双击 package.appxmanifest 打开清单设计器。 选择 声明 选项卡,然后在 可用声明 下拉列表中,选择 文件类型关联,然后单击 添加。 有关文件关联使用的标识符的更多详细信息,请参阅 编程标识符

    以下是关于您可以在清单设计器中填写的每个字段的简要说明:

描述
显示名称 指定一组文件类型的显示名称。 显示名称用于标识 控制面板设置默认程序 中的文件类型。
徽标 指定用于标识桌面上的文件类型和 设置默认程序控制面板的徽标。 如果未指定徽标,则使用应用程序的小型徽标。
信息提示 为一组文件类型指定信息提示 。 当用户将鼠标悬停在此类型的文件的图标上时,将显示此工具提示文本。
名称 为共享相同显示名称、徽标、信息提示和编辑标志的一组文件类型选择一个名称。 选择可在应用更新中保持不变的组名称。 注意 名称必须采用所有小写字母。
内容类型 指定特定文件类型的 MIME 内容类型,例如 image/jpeg有关允许的内容类型的重要说明: 下面是无法输入到包清单中的 MIME 内容类型的字母列表,因为它们是保留或禁止的:应用程序/强制下载application/octet-stream应用程序/未知application/x-msdownload
文件类型 指定要注册的文件类型,前面有句点,例如“.jpeg”。 保留和禁止文件类型: 请参阅 保留 URI 方案名称和文件类型,了解无法注册 UWP 应用的内置应用的文件类型的字母列表,因为它们是保留或禁止的。
  1. 输入 alsdk 作为 名称
  2. 输入 .alsdk 作为 文件类型
  3. 输入“图像\Icon.png”作为标志。
  4. 按 Ctrl+S 将更改保存到 package.appxmanifest。

上述步骤将一个类似这样的 扩展 元素添加到包清单中。 windows.fileTypeAssociation 类别指示应用处理扩展名为 .alsdk 的文件。

      <Extensions>
        <uap:Extension Category="windows.fileTypeAssociation">
          <uap:FileTypeAssociation Name="alsdk">
            <uap:Logo>images\icon.png</uap:Logo>
            <uap:SupportedFileTypes>
              <uap:FileType>.alsdk</uap:FileType>
            </uap:SupportedFileTypes>
          </uap:FileTypeAssociation>
        </uap:Extension>
      </Extensions>

步骤 2:添加正确的图标

成为文件类型默认应用的程序,其图标会显示在系统的各个位置。 例如,这些图标显示在:

  • Windows 资源管理器项目视图、上下文菜单和功能区
  • 默认程序控制面板
  • 文件选取器
  • “开始”屏幕上的搜索结果

在项目中包括一个 44x44 图标,以便徽标可以出现在这些位置。 匹配应用磁贴徽标的外观,并使用应用的背景色,而不是使图标透明。 使徽标扩展到边缘,无需填充。 在白色背景上测试图标。 有关图标的详细信息,请参阅 磁贴和图标资产指南

步骤 3:处理激活的事件

OnFileActivated 事件处理程序接收所有文件激活事件。

protected override void OnFileActivated(FileActivatedEventArgs args)
{
       // TODO: Handle file activation
       // The number of files received is args.Files.Count
       // The name of the first file is args.Files[0].Name
}
Protected Overrides Sub OnFileActivated(ByVal args As Windows.ApplicationModel.Activation.FileActivatedEventArgs)
      ' TODO: Handle file activation
      ' The number of files received is args.Files.Size
      ' The name of the first file is args.Files(0).Name
End Sub
void App::OnFileActivated(Windows::ApplicationModel::Activation::FileActivatedEventArgs const& args)
{
    // TODO: Handle file activation.
    auto numberOfFilesReceived{ args.Files().Size() };
    auto nameOfTheFirstFile{ args.Files().GetAt(0).Name() };
}
void App::OnFileActivated(Windows::ApplicationModel::Activation::FileActivatedEventArgs^ args)
{
    // TODO: Handle file activation
    // The number of files received is args->Files->Size
    // The name of the first file is args->Files->GetAt(0)->Name
}

注意

通过文件合同启动时,请确保“后退”按钮将用户返回到启动应用程序的屏幕,而不是应用程序以前的内容。

注意

在 WinUI 应用中,在 App.OnLaunched(或在任何时候)中,可以调用(AppInstance.GetActivatedEventArgs)来检索激活的事件参数,并检查它们以确定应用是如何激活的。 有关 UWP 和 WinUI 应用之间的生命周期差异的详细信息,请参阅 应用程序生命周期功能迁移

建议为每个打开新页面的激活事件创建新的 XAML Frame。 这样,新 XAML 框架的导航后台堆栈就不包含应用在挂起时当前窗口上可能具有的任何先前内容。 如果你决定将单个 XAML Frame 用于启动和文件协定,则应在导航到新页面之前清除 Frame导航日志中的页面。

通过文件激活启动应用时,应考虑包括允许用户返回到应用顶部页面的 UI。

言论

收到的文件可能来自不受信任的源。 我们建议在对文件采取操作之前先验证其内容。