3

我有一个命令行应用程序(不是 .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/lib

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

或者我应该将文件结构设置为/usr/local/MyApp?以 root 用户身份运行 myapp LaunchDaemon 的最佳位置是哪个? /usr/local还是usr/bin其他地方?

4

1 回答 1

3

您应该查看 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/[my product name] 或 ~/Library/Application Support/[my product name] 中。带有波浪号 (~) 的后一个表示它仅适用于某个用户,而另一个将适用于所有用户。

于 2016-03-31T01:11:28.080 回答