我有一个命令行应用程序(不是.app bundle),一个可执行文件。它从例如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/lib
?
另一个选择是创建一个完整的文件夹结构/usr/bin/MyApp
,并复制我的myapp
二进制文件,并将nss
文件保存在/usr/bin/MyApp/nss
文件夹。但这是个好主意吗?
或者我应该将文件结构设置为/usr/local/MyApp
?哪个是运行myapp LaunchDaemon作为根用户的最佳位置?/usr/local
或usr/bin
或其他地方?
你应该看看Mac的杀毒程序以及它们保存文件的位置。这就是我想我是如何学会回答你的问题的:
如果绝对必须,那么在旧系统上安装/usr/bin,在新系统上安装/usr/local/bin。(我认为当OSX 10.10发布时,他们切换到/usr/local/bin,但不知道确切的版本。)您想要在那里放置某些东西的唯一真正原因是,您的产品消费者可以打开终端窗口并运行命令。如果你不这样做,那么你不需要把它放在那里。
因此,如果某人不打算在终端窗口中键入您的命令,并且如果您不需要以特殊权限运行,并且如果您的。app是唯一调用它的东西,然后你应该把命令放在你的/Applications/my中。应用程序/内容/资源文件夹。
现在,如果这些都不适用于你,那么你应该在/Library/Application Support/[my product name]文件夹中创建命令,如果它适用于所有用户,如果它只适用于当前用户,那么你应该在~/Library/Application Support/[my product name]文件夹中创建命令。你可能会遇到的一个问题是文件夹名称冲突。所以,你可以用Java文件夹的方式来代替"我的产品名称",就像Opera浏览器为他们的产品做的那样:~/Library/Application Support/com. operassoftware .Opera.
至于你的LaunchDaemon或LaunchAgent的支持库,那么你可以将它们安装在/Library/Application Support/[我的产品名称]或~/Library/Application Support/[我的产品名称]。后一个带有波浪号(~)表示它只适用于某个用户,而另一个则适用于所有用户。