处理文件激活

重要的 API

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

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

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

请注意 ,在 UWP 应用中,某些 URI 和文件扩展名保留供内置应用和操作系统使用。 将忽略尝试使用保留 URI 或文件扩展名注册应用。 有关详细信息,请参阅 保留文件和 URI 方案名称

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

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

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

    下面是可以填写清单设计器的每个字段的简要说明:

字段 说明
显示名称 指定一组文件类型的显示名称。 该显示名称用于在“控制面板”上的设置默认程序中标识文件类型
Logo 指定用于标识桌面上以及“控制面板”的设置默认程序中的文件类型的徽标。 如果未指定徽标,则使用应用程序的小型徽标。
信息提示 指定 一组文件类型的信息提示 。 当用户将鼠标悬停在此类型的文件的图标上时,将显示此工具提示文本。
Name 为共享相同显示名称、徽标、信息提示和编辑标志的一组文件类型选择一个名称。 选择可在应用更新中保持不变的组名称。 请注意 ,名称必须采用所有小写字母。
内容类型 指定特定文件类型的 MIME 内容类型,例如 image/jpeg有关允许的内容类型的重要说明: 下面是 MIME 内容类型的字母列表,无法输入到包清单中,因为它们是保留或禁止的: application/force-downloadapplication/octet-streamapplication/unknownapplication/x-msdownload
文件类型 指定要注册的文件类型,前面有句点,例如“.jpeg”。 保留和禁止文件类型: 对于无法注册 UWP 应用的内置应用的文件类型的字母顺序列表,请参阅 保留 URI 方案名称和文件类型 ,因为它们是保留的或禁止的。
  1. 输入 alsdk 作为“名称”
  2. 输入 .alsdk文件类型
  3. 输入“images\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
}

注意

通过文件合约启动后,请确保“后退”按钮可使用户返回到已启动应用的屏幕,而不是应用的早期内容。

建议为打开新页面的每个激活事件创建一个新的 XAML Frame。 通过此方式,新 XAML Fram 的导航 Backstack 将不包含应用暂停时可能在当前窗口中显示的所有早期内容。 如果确定针对启动和文件合约使用单个 XAML Frame,则应在导航到新页面之前,清除该 Frame 的导航日志上的页面

通过文件激活启动应用后,应考虑包含可使用户返回到应用顶部页面的 UI。

注解

收到的文件可能来自不受信任的源。 建议在对文件执行操作之前验证文件的内容。

完整示例

概念

任务

准则

参考