【问题标题】:What gets sent to a application when you open a file?打开文件时会向应用程序发送什么?
【发布时间】:2017-05-02 19:51:00
【问题描述】:

所以,我的问题很简单(而且我不够聪明,无法找到答案)

当您单击文件时,例如blahblahblah.txt。例如,由于您的默认文本编辑器是textedit.app,计算机是否将应用程序blahblahblah.txt 的文件路径作为参数发送。

抱歉,我是处理文件的新手。

我之所以问这个问题是因为,如果我将 .jar 文件打包到 .exe 中,我对计算机如何处理这个问题感到困惑。

【问题讨论】:

    标签: java file event-handling operating-system


    【解决方案1】:

    将使用不同的机制,具体取决于操作系统以及您实际在做什么。

    当您双击文件以在(例如)编辑器中打开它时,操作系统通常会:

    • 确定文件的类型(通过其元数据、后缀或一些启发式方法)
    • 查找与文件类型关联的应用程序
    • 启动应用程序,将文件的路径名作为参数传递

    (细节是特定于操作系统的......但与我认为你真正要问的内容并不真正相关。)

    但是当您启动一个包含在 EXE 中的 JAR 文件时,EXE 本身将负责 JVM 的启动。它将如何执行取决于 EXE 是如何生成的;即您使用的第 3 方工具。

    无论哪种方式,当您运行包装 JAR 的 EXE 时发生的情况可能与您(例如)双击文本文件时发生的情况不同

    【讨论】:

      【解决方案2】:

      这是高度系统特定的。通常,您所描述的是正在使用的图形外壳的功能。

      一些系统,例如太监,根本没有文件扩展名的概念。扩展名只是文件命名约定。 Enuchs 图形外壳必须解析文件名才能找到扩展名。

      其他操作系统具有文件扩展名或类型与文件名分开编码的文件系统。

      在 Windoze(它确实单独存储文件扩展名)上,应用程序映射是通过注册表完成的。

      在 Mac 上,有一个启动服务数据库来进行映射。它比 Windoze 系统复杂得多。

      在命令行中情况完全不同。在 Eunuchs 命令行 shell 中,“扩展”是没有意义的。

      在其他系统上,有默认扩展。如果您在 Windoze 提示符下并键入

      程序

      命令解释器查找带有 .com、.bat 或 .exe 的“程序”。

      在 VMS 上,

      R 程序

      使命令解释器查找 PROGRAM.EXE 并运行它。或者

      @文件

      使命令解释器查找并执行命令文件file.com。

      因此,您正在处理两个系统特定的变量:

      1. 底层文件系统是否支持文件扩展名?

      2. shell 如何将文件扩展名映射到应用程序。

      【讨论】:

        猜你喜欢
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多