cocoa - 通过 AuthorizationExecuteWithPrivileges 运行 sh 脚本

标签 cocoa macos shell

我正在通过 cocoa 应用程序运行卸载脚本,我注意到 launchctl 命令没有被执行。

这是调用脚本的代码部分(其中包含 sudo launchctl unload“守护进程的名称”)

//pFileName is the name of the File

NSString* pPath = [pCurrentBundle pathForResource:pFileName ofType:@"sh"];
char* const ppArgs[] = {const_cast<char*>([pPath fileSystemRepresentation]), NULL};

OSStatus status =  AuthorizationExecuteWithPrivileges(m_AuthorizationRef, "/bin/sh", kAuthorizationFlagDefaults, ppArgs, NULL); 

由于所有其他脚本命令都正确执行(并且它在终端中正常卸载),我猜测我没有与 TN2083 状态的 root 相同的权限(EUID 和 RUID 均为 0)。

最佳答案

首先,您不应该在已经以 root 身份运行的脚本中使用 sudo。在默认的 Mac 设置下,它不会导致问题,但这取决于用户如何配置 sudoers。这仍然是我对破坏的最大怀疑。

接下来,当它运行时,您是否收到任何错误消息到控制台?你提到其他事情正在运行;他们是在这之前还是之后?您是否正在检查此脚本行的 unix 错误结果?

我假设您已阅读 Creating launchd Daemons and Agents .

您说脚本正在运行,所以我假设它实际上具有扩展名 .sh 并且 pFileName 不包含“.sh”。

TN2083 没有引用 AuthorizationExecuteWithPrivileges。 “如 TN2083 所述”是什么意思?

我假设您没有在脚本上设置 setuid 位,对吗?这会给您带来 AuthorizationExecuteWithPrivileges 的麻烦。

关于cocoa - 通过 AuthorizationExecuteWithPrivileges 运行 sh 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1162448/

相关文章:

objective-c - 如何取消正在进行的撤消/重做操作?

objective-c - 按字符数拆分 NSString?

java - 从 Oracle 数据库调用批处理脚本/Java 代码

linux - 跟踪 ksh 多个 session 的命令历史记录

bash - 如何在bash中对浮点变量求和?

objective-c - 在 NSDocument 架构中打开文档之前进行验证

objective-c - 在 Cocoa 中的对象/线程之间传递数据

objective-c - Cocoa:获取和更改第三方应用程序中的文本和选择(无需模拟按键或使用可访问性 API)

macos - 基于 View 的 NSTableView + NSButton

excel - "Object doesn' t 支持此操作"用于 Excel 2011 (Mac OS X) 中的下拉菜单