我有一个命令行应用程序(不是 .app 包),一个可执行文件。它从例如运行usr/bin/myapp
。 mac 中的所有用户都应该可以访问它。它是一个 LaunchDaemon 并作为 root
用户运行。如果我将它保存在 usr/bin
中,它就可以正常工作。
当用户安装应用程序时,pkgbuild
将文件复制到 /usr/bin
和 postinstall
脚本启动 LaunchDaemon。
该应用程序依赖于 nss
库。所以现在我需要将 nss 二进制文件和 dylib 文件复制到某个地方,例如usr/bin/lib/nss
文件夹。是否可以使用 pkgbuild
或 preinstall
脚本?由于 pkgbuild --install-location
设置为 /usr/bin
会将 myapp
复制到那里,但是如何将 nss 文件夹复制到 usr/库
?
另一种选择是制作一个完整的文件夹结构/usr/bin/MyApp
并将我的myapp
二进制文件复制到那里并保留nss
/usr/bin/MyApp/nss
文件夹中的文件。但这是个好主意吗?
或者我应该在 /usr/local/MyApp
中创建文件结构吗?
哪个是作为 root 用户运行 myapp LaunchDaemon 的最佳位置?
/usr/local
或 usr/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/