【问题标题】:Is it possible to bundle a kext in a Application?是否可以在应用程序中捆绑 kext?
【发布时间】:2012-10-16 14:33:03
【问题描述】:

我有一个需要 kext 的 Mac OS X 应用程序(也是我构建的)。我想将kext“捆绑”到应用程序中,这样当用户运行应用程序时,会自动加载kext(当然,可能会显示管理员密码提示)。有可能吗,还是我需要在安装时安装 kext?

【问题讨论】:

    标签: java macos installation kernel-extension


    【解决方案1】:

    您可以从您的应用程序中安装它。您需要使用服务管理框架以提升的权限(用 C 或 Obj-C 编写)运行任务。然后可以安装kext。

    您的帮助工具应该是一个可执行文件,以提升的权限运行,以代表您的应用执行安装 kext 的操作。

    步骤:

    1. 将 Kext 和帮助工具作为资源包含在您的应用程序包中
    2. 创建一个辅助工具来为您完成这项工作。您的帮助工具需要将您的 kext 复制到 /System/Extensions 目录。您需要以提升的权限复制它。让你的帮助工具调用 kextload 来安装它。
    3. 您需要对帮助工具和应用进行代码签名,并将服务管理框架的相关条目放在帮助和主应用的 info.plist 中。

    Apple 开发人员的文档绝对是残暴的。祝你好运。您可能必须使用 Objective-C 或 C 而不是 Java 来完成这一切,因为您必须使用诸如 Security Framework 和 Service Manager 之类的 C 库以及代码签名。

    【讨论】:

      【解决方案2】:

      我已经成功捆绑了它!我运行了一个脚本,要求输入 root 密码,然后继续安装 kext。唯一的问题是必须事先知道捆绑的 kext 的位置(我必须对它们“cd”);所以应用程序必须放在预定义的位置,否则将无法工作。

      【讨论】:

      • 脚本肯定能找出it在哪里,从而通过相对路径推断出kext的位置;或者将 kext 的位置作为参数传递给脚本?
      • kext 被“捆绑”在应用程序中,而它又可以放在任何地方。如果您知道推断当前文件夹的方法,请告诉我。
      • 取决于:你是如何启动脚本的,它是什么类型的脚本?
      • 在 MyApp.app 中,我编辑了 Info.plist,以便从我的脚本开始执行。显然,当用户双击应用程序(启动应用程序)时,脚本从用户主文件夹而不是 MyApp 文件夹运行......(也许我应该将此作为问题发布......)
      • 我假设这是一个shell脚本呢?如果是这样,您可以通过 $0 变量获取脚本的路径。
      猜你喜欢
      • 2020-07-05
      • 2015-05-23
      • 1970-01-01
      • 2021-05-06
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多