2

Linux 中有一些可移植应用程序的实现,但似乎所有Mac OS X 应用程序都是可移植的。由于 Mac OS X 完全接受了这个模型,我假设他们已经有了解决这个问题的方法。

由于 Windows 通过将文件放在各处并更改注册表中的内容来“安装”应用程序,因此可以轻松地进行文件关联。但是,假设我刚刚下载了 Mac OS X(或其他)的 MPlayer。我希望我所有的电影都在 MPlayer 中打开。然后,我决定移动 MPlayer 的应用程序包(嘿,它是可移植的,对吧?)。协会会解散吗?或者这根本不是 OS X 上的做法?

如何在 Linux 中实现可移植应用程序?它应该类似于 OS X 的模型吗?我知道这是一个非常开放的问题,但任何建议都值得赞赏。

4

2 回答 2

2

OS X 的 Launch Services 数据库以多种方式跟踪文档绑定 — 通常,即使您已移动应用程序,它也会尽最大努力匹配应用程序。

您可以运行lsregister -dump( lsregisteris /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister) 来查看 Launch Services 数据库对绑定的说明。例如,如果我绑定文本文件以使用 TextWrangler 打开,我会看到:

handler id:            3124
    content type:  public.plain-text
    options:       
    all roles:     com.barebones.textwrangler (0x3ea30180)

public.plain-text是表示纯文本的统一类型标识符(映射到一个或多个文件扩展名、MIME 类型等,并且可能具有子类型),并且com.barebones.textwrangler是 TextWrangler 的包 ID。

我不知道有任何 Linux 标准在文档绑定方面如此健壮——要执行类似 Mac 的操作,首先需要有一种标准方法来识别应用程序,而不管它们的位置或名称如何(如 Java 包之类的/reverse-DNS 方法(Mac 上的 /reverse-DNS 方法),然后是用于类型映射和绑定的注册表,随后是足够有用的桌面环境,以及一些在安装应用程序时注册应用程序的方法。

您不一定需要单独的文件(例如Info.plistMac 应用程序包中的文件)来存储此信息;即使在 Mac OS X 上,您也可以将信息嵌入到启动服务索引的二进制部分中(请注意,这不是单独的“分叉”或扩展属性;它就像在可执行文件中嵌入调试信息)。.desktop因此,也许可以嵌入文件的一些派生。另一方面,您需要一种识别内容的方法。理想情况下,您甚至可以进行内容嗅探,例如file(1)识别文档类型的命令;经典的 Mac OS 使用翻译管理器(它允许注册从一种格式到另一种格式的转换器以及嗅探器)来做到这一点。

UTI 和翻译管理器处理 (d) 剪贴板和拖放内容以及磁盘上的文件;统一这些格式表示非常有用。

于 2011-01-10T06:21:38.917 回答
2

每个文件浏览器(例如 Nautilus、Konqueror)都必须配置为使用自己的文件关联。幸运的是,Free Desktop 项目一直致力于标准化文件关联(以及许多其他事情)。根据共享 MIME 数据库的描述,目前还没有正式的规范,但是格式已经非常标准化了。

Free Desktop 项目还使用.desktop文件来提供“可移植性”(也许您应该为此使用另一个词……也许是“可移动的”?)。如果将可执行文件移到 之外PATH,则可以更新.desktop以指向正确的位置。

基本上,Linux 社区正在进行大量工作,朝着实现这些目标的更加用户友好和开发人员友好(即标准化)的方式发展。但事情还没有完成。

于 2011-01-10T04:43:15.087 回答