我已经厌倦了内置的open
Mac OS X命令,主要是因为它使用您的实际用户ID运行程序,而不是有效的用户ID;这导致事实sudo open Foo
用您的帐户而不是root
帐户将Foo与其关联的应用程序打开,这让我很烦恼。所以我决定做一些更换。如何使用通过NSTask启动的应用程序打开文档?
到目前为止,我已经成功了:我可以在open -a
或open -b
时尚下打开任何程序,并支持随时等待。我为此使用了NSTask
。
但是,我希望能够打开文档。据我所知,您需要使用NSWorkspace
,但使用NSWorkspace
启动程序会导致它们以您的账户凭证而不是您的命令行程序凭证启动。这正是默认的open
工具所做的,正是我不想要的。
那么,我怎么能有一个程序请求,另一个程序打开一个文件,而不使用NSWorkspace
?从NSTask
对象中,我可以拥有进程ID,但这就是它。
你所描述的将是一种极端的安全风险。以root身份运行GUI应用程序并不是一个好主意。你为什么想这样做?可能有更好的方法。 – 2010-03-26 00:37:30
@Rob Keniger:我的目标是有一个'open'-like程序,在'root'下运行程序,如果我'sudo打开'它们,而不必执行'sudo/full/application/path/Contents/MacOS/program'。我知道作为'root'运行程序的风险,我想为自己做。没有重新分配计划,也没有任何生产环境取决于它。例如,有时我只想从活动监视器获取信息,只有在以“root”身份运行时才能收集信息(如打开文件和守护进程的端口)。这并不像我想以'root'运行Finder或Safari。 – zneak 2010-03-26 01:06:17