macos - OSX - 在哪里放置我的命令行二进制 launchdaemon 和相关的 dylibs

标签 macos filesystems installation pkgbuild launch-daemon

我有一个命令行应用程序(不是 .app 包),一个可执行文件。它从例如运行usr/bin/myapp 。 mac 中的所有用户都应该可以访问它。它是一个 LaunchDaemon 并作为 root 用户运行。如果我将它保存在 usr/bin 中,它就可以正常工作。

当用户安装应用程序时,pkgbuild 将文件复制到 /usr/binpostinstall 脚本启动 LaunchDaemon。

该应用程序依赖于 nss 库。所以现在我需要将 nss 二进制文件和 dylib 文件复制到某个地方,例如usr/bin/lib/nss 文件夹。是否可以使用 pkgbuildpreinstall 脚本?由于 pkgbuild --install-location 设置为 /usr/bin 会将 myapp 复制到那里,但是如何将 nss 文件夹复制到 usr/库

另一种选择是制作一个完整的文件夹结构/usr/bin/MyApp 并将我的myapp 二进制文件复制到那里并保留nss /usr/bin/MyApp/nss 文件夹中的文件。但这是个好主意吗?

或者我应该在 /usr/local/MyApp 中创建文件结构吗? 哪个是作为 root 用户运行 myapp LaunchDaemon 的最佳位置? /usr/localusr/bin 或其他地方?

最佳答案

您应该查看 Mac 的防病毒程序以及它们保存文件的位置。这就是我认为我已经学会回答你的问题的方式:

如果你绝对必须,那么将你的命令安装在旧系统上的/usr/bin 和新系统上的/usr/local/bin 中。 (我想当 OSX 10.10 发布时,他们切换到/usr/local/bin,但不知道确切的版本。)你想把东西放在那里的唯一真正原因是你的产品消费者可以打开终端窗口并运行命令。如果您不这样做,则无需将其放在那里。

因此,如果有人不打算在终端窗口中键入您的命令,并且您不需要以特殊权限运行,并且如果您的 my.app 是唯一调用它的东西,那么您应该将命令放在/Applications/my.app/Contents/Resources 文件夹中。

现在,如果这些都不适用于您,那么您应该在/Library/Application Support/[my product name] 文件夹中创建命令(如果它适用于所有用户)和 ~/Library/Application Support/[my product name] 文件夹,如果它仅适用于当前用户。现在,您可能遇到的一个问题是此处的文件夹名称冲突。因此,除了“我的产品名称”之外,您还可以使用 Java 文件夹方式,例如 Opera 浏览器为其产品所做的操作:~/Library/Application Support/com.operasoftware.Opera。

至于 LaunchDaemon 或 LaunchAgent 的支持库,您可以将它们安装在/Library/Application Support/[我的产品名称] 或 ~/Library/Application Support/[我的产品名称] 中。后一个带有波浪号 (~) 的意味着它仅适用于特定用户,而另一个将适用于所有用户。

关于macos - OSX - 在哪里放置我的命令行二进制 launchdaemon 和相关的 dylibs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32244333/

相关文章:

objective-c - 带有自定义阴影的自定义 NSWindow

eclipse - Mac eclipse 将工作区设置为 dropxbox 导致启动崩溃

filesystems - 如何遍历FAT目录、文件

c# - COM 注册和 GAC

mysql - 在MySQL安装中取消勾选Modify Security Settings时,Access Denied root@localhost

c++ - 如何将 ZeroMQ 作为 32 位库并将其与标准 64 位库合并?

MYSQL命令启动错误

javascript - 如何将 svg Canvas 保存到本地文件系统

android - Cordova /PhoneGap : open file from other app

linux - 在 Linux Mint Dell 9550 上安装 OpenCL 的说明