有没有办法在WinRT中找出是否可以启动具有特定扩展名的文件?

时间:2014-07-02 08:26:18

标签: c# windows-runtime file-type windows-store

我目前正在编写一个Windows应用商店应用,我希望能够直接打开特定文件,如果有一个已知应用则打开它。否则我想隐藏这个选项。

打开文件的常用方法是使用Launcher.LaunchFileAsync(IStorageFile) - 方法。它直接打开文件或提供打开文件的可能应用程序列表。因此,它有时会知道打开文件的应用程序,有时不知道。但有没有办法找出是否安装了这样的应用程序,或者不是以编程方式安装,以便我可以决定是否隐藏打开按钮?

2 个答案:

答案 0 :(得分:1)

我不了解获取此类数据的原生RT方法,但windows-runtime仍然是Windows。所以你可以access the registry。确定文件类型是否具有关联应用程序的所有必需信息都包含在注册表中。

考虑到这两个注意事项,您可以尝试使用此SO thread作为启用代码的基础。

P.S。:原生RT方法可能是更好的解决方案,但遗憾的是,我对Win-RT的体验非常短暂。可能是更有知识的人可以提出更好的原生解决方案。

答案 1 :(得分:1)

Windows应用商店应用不支持此功能。

一般模型是“让用户保持控制”,这意味着如果没有可用于文件或URI关联的应用程序,他们可以选择在商店中找到一个以完成工作流程。我相信,这也是为了鼓励购买新应用程序。

换句话说,协会启动是需求驱动的,其中邀请用户在他们需要时准确地找到应用程序,而不是单独寻找以某种方式配置设备的应用程序,然后启用其他应用程序中的功能(例如启用某些文件类型)。

在你建议的模型中,使用文件的应用程序隐藏了无关联的文件类型,请问自己:用户如何启用文件类型?也就是说,他们可以使用文件浏览器(或其他应用程序)在其系统上查看文件。但在你的应用程序中,他们没有看到它列出。这本身就是一个可能混淆的地方 - 我可以在你的评论中看到评论“我怎样才能让这些文件出现?”你唯一的答案是“嗯,你必须先安装一些其他可以处理该文件类型的应用程序。”客户:“我如何找到这些应用程序?”你:“嗯...”,因为商店应用程序没有为您提供通过关联支持进行搜索的方式...也许您可以通过关键字获得幸运。

或者,假设用户碰巧从商店或桌面应用程序中获取了一些其他应用程序,这意味着这些文件开始出现在您的应用程序中,原因并不明确。客户肯定会问为什么会这样。

简而言之,您建议的模型可能会在文件系统上显示的内容与应用中显示的内容之间产生脱节,这很难协调。我想在处理断开连接的过程中,你最终会被创建一个UI来显示无关联的文件类型,然后邀请用户去获取一个支持它们的应用程序(如果你甚至可以启动它)按此标准存储)。我不确定,但我猜大量桌面应用程序都做了这件事,这就是为什么Windows选择Store应用程序直接在启动API中构建UI。