Linux 中有一些可移植应用程序的实现,但似乎所有 Mac OS X 应用程序都是可移植的。由于 Mac OS X 完全支持此模型,我假设他们已经找到了解决此问题的方法。
由于 Windows 通过将文件放在各处并更改注册表中的内容来“安装”应用程序,因此可以轻松地进行文件关联。但是,假设我刚刚下载了适用于 Mac OS X(或其他)的 MPlayer。我希望我的所有电影都能在 MPlayer 中打开。然后,我决定移动 MPlayer 的应用程序包(嘿,它是可移植的,对吧?)。协会会破裂吗?或者 OS X 上根本就不是这样的?
如何在 Linux 中实现可移植应用程序?它应该类似于 OS X 的模型吗?我知道这是一个非常开放式的问题,但任何建议都会受到赞赏。
最佳答案
OS X 的启动服务数据库以多种方式跟踪文档绑定(bind) — 通常,即使您移动了应用程序,它也会尽力尝试匹配该应用程序。
您可以运行lsregister -dump
(lsregister
是/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
) 以查看启动服务数据库对绑定(bind)的说明。例如,如果我绑定(bind)文本文件以使用 TextWrangler 打开,我会看到:
handler id: 3124
content type: public.plain-text
options:
all roles: com.barebones.textwrangler (0x3ea30180)
public.plain-text
是 Uniform Type Identifier (映射到一个或多个文件扩展名、MIME 类型等,并且可能有子类型)表示纯文本,com.barebones.textwrangler
是 TextWrangler 的包 ID。
我不知道有任何 Linux 标准对于文档绑定(bind)来说如此强大 - 要执行类似 Mac 的操作,首先需要有一个标准方法来识别应用程序,无论其位置或名称如何(例如 Java Mac 上的类似包/反向 DNS 方法),然后是类型映射和绑定(bind)的注册表,后面是足够有用的桌面环境,以及安装应用程序时注册应用程序的某种方法。
您不一定需要单独的文件(例如 Mac 应用程序包中的 Info.plist
)来存储此信息;即使在 Mac OS X 上,您也可以将信息嵌入到启动服务索引的二进制部分中(请注意,这不是单独的“ fork ”或扩展属性;这就像将调试信息嵌入到可执行文件中)。因此,也许可以嵌入 .desktop
文件的某些衍生文件。另一方面,您需要一种识别内容的方法。理想情况下,您甚至可以像 file(1)
命令一样进行内容嗅探来识别文档类型;经典的 Mac 操作系统通过 Translation Manager 做到了这一点(允许注册从一种格式到另一种格式的转换器以及嗅探器)。
UTI 和翻译管理器处理剪贴板并拖放内容以及磁盘上的文件;当您这样做时,统一这些格式表示非常有用。
关于linux - 系统如何在需要时调用可移植应用程序(例如文件关联)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4643642/