考虑使用命令行应用程序需要在OSX上以root身份运行的第三方SDK。您在Objective C中构建一个Cocoa应用程序,并将其安装在/ root下的“root:wheel”(user:root,group:wheel)所有权下。我已经拥有该文件夹/文件所有权,因为我的安装程序应用程序使用AppleScript提示输入root,然后为此执行chown和chmod。用目标C更新根目录Crontab
那么,Cocoa应用程序更新根的crontab以便第三方命令行应用程序在根环境下运行的首选编程方式是什么?我的意思是,当我运行Cocoa应用程序时,它是否在根目录下运行,因为这是我在安装程序中设置文件所有权的方式?或者,Apple是否以登录用户身份启动它?如果应用程序在根环境下运行,那么我猜想普通的文件I/O将起作用。如果,即使我已经以root身份安装了Cocoa应用程序,它将以登录到笔记本电脑的用户身份运行,那么我需要提升权限以root身份执行该文件I/O。我想这样做,而不必每次都提示进入钥匙串访问。
我创建的曾在applicationDidFinishLaunching
类方法如下样品OSX Cocoa应用程序(MyApp.app):
std::ofstream outfile;
outfile.open("/tmp/test.txt");
NSString *sUser = NSUserName();
outfile << "\n" << [sUser UTF8String] << "\n";
std::ofstream outfile2;
outfile2.open("/var/at/tabs/root");
outfile2 << "\n#DEMO";
我然后将其复制到/应用程序和没有chown -R root:wheel /Applications/MyApp.app
。
当我运行它时,/tmp/test.txt显示“mike”(不像我希望的那样),而/ var/at/tabs/root文件没有附加“#DEMO”。
我想它没有权限,就像我希望的那样。那么,让我的应用程序能够在不提示每次更新/ var/at/tabs/root的情况下,除了在安装期间或者在安装后第一次运行时(如果这不可能) ?
看一看[ServiceManagement Reference](https://developer.apple.com/library/mac/documentation/ServiceManagement/Reference/ServiceManagement_header_reference/)(例如SMJobBless) –
这个Q不是编程相关的,但是管理员相关。基本上,它是“我需要做什么*运行*具有root权限的应用程序?” –
@ AminNegm-Awad我还不确定。我会尝试一些实验,看看我想出了什么,然后添加到这个问题。 – Volomike