【问题标题】:Is there a way in WinRT to find out whether a file with a specific extension can be launched?WinRT 中有没有办法确定是否可以启动具有特定扩展名的文件?
【发布时间】:2014-08-22 23:04:25
【问题描述】:

我目前正在编写一个 Windows 商店应用程序,我想在其中提供直接打开特定文件的可能性,如果有已知的应用程序可以打开它。否则我想隐藏这个选项。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我明白你想告诉我的,我已经知道这个模型。 在一般使用方面,你所说的是正确的。 但是由于我的应用是 LOB 应用,它应该只使用 windows 商店销售和部署,并且在使用时它无法访问互联网。所以用户将无法获得新的应用程序。此外,如果用户将设备连接到互联网,就公司政策而言,这将是非法的。此外,当用户打开他不应该打开的文件时,还会存在安全问题。在这些使用条款中,这样的功能将非常有用。
    • 您能帮我澄清一下 LOB 的性质吗?您是说它将通过商店出售和部署而不是侧面加载?因为如果您侧载,那么您可以使用代理 WinRT 组件来访问注册表 API。
    • 由于应将应用程序部署到商店并通过侧载到客户设备,并且我们不想维护它的不同版本,我们决定采用常规方式“保留用户掌控之中”。所以你是对的!谢谢。
    【解决方案2】:

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

    考虑到这两个因素,您可以尝试将此SO thread 用作启用代码的基础。

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

    【讨论】:

    • 访问注册表的问题是,我的应用程序无法通过商店认证过程,您可以阅读here。此外,还要求它在 ARM 上运行。在这些方面,这对我来说不是解决方案。但是谢谢你的这个想法。
    • 哦,是的。抱歉,我刚刚查看了 win-store 标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多