从 Objective-C 运行 sudo 命令

2023-12-27

如何从 Objective-C 运行 sudo 命令?我可以使用以下方法运行不需要 sudo 的简单命令:

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];

NSArray *arguments = [NSArray arrayWithObjects:@"-c" ,[NSString stringWithFormat:@"%@", cmd], nil];


NSLog(@"run command: %@",cmd);
[task setArguments: arguments];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *output;
output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
return output;

当我运行 sudo 命令时,出现错误:不允许操作。

根据我在网上找到的信息,我需要获得授权。我阅读了 Apple 的授权文档,但没有指定说明点。

Apple 的 EvenBetterAuthorizationSample 示例不起作用。

该应用程序使用 Apple ID 进行签名。


你应该学习授权服务编程指南 https://developer.apple.com/library/mac/documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/doc/uid/TP30000995,但如果你想使用sudo你可以。

What sudo需要是授权执行的密码,它通常从terminal- 那是not与标准输入相同,但在命令 shell 中标准输入默认也连接到终端。这-S的选项sudo指示它从标准输入读取密码。

按照您现有的设计,您可以:

1) Add -S to the sudo command

2) 输入密码的提示以及任何错误信息,例如密码无效,将由sudo到标准误。创建管道并将其附加到任务standardError,或将现有管道连接到两者standardOutput and standardError,捕获此输出。

3)创建另一个管道并将其附加到任务standardInput。将密码后跟换行符写入该管道。当任务运行时sudo将读取密码并执行您的命令。当然,如果命令本身需要输入也将从管道中读取 - 所以您必须将其写入管道。

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Objective-C 运行 sudo 命令 的相关文章

  • 检测iOS设备类型

    在我的应用程序 用 Objective C 编写 中 如何检测设备是 iPhone iPad 还是 iPhone5 if UIDevice currentDevice userInterfaceIdiom UIUserInterfaceId
  • 如何在 XCode 中将 C++ 与 Objective-C 结合使用

    我想在 Objective C 中使用 重用 C 对象 我有一个包含类定义的 hello h 和用于类实现的 hello cpp class Hello int getX 我在 Objective C 函数中使用这个类 include he
  • 初始化单例的不同方式

    在 C 和 Java 中 我基本上看到了每个人初始化单例的一种方法 static obj inst null obj getInstance if inst null inst new obj return inst 现在 当我转向 iPh
  • TextField 中的 NSAttributedString 在单击时更改/重置

    我正在跟进THIS https developer apple com library mac qa qa1487 index html来自苹果的指南 但它并没有真正正常工作 基本上 我试图通过自定义 WindowController 类向
  • 获取动画 UIImageview 的坐标

    我正在水平位置对 UIImageview 进行动画处理 为此我使用了下面的代码我使用了 NSTimer timer NSTimer scheduledTimerWithTimeInterval 0 2 target self selecto
  • 在 UITableViewCell 中动态显示秒表计时器

    我想保存计时器值并从新的开始显示它UITableViewCell但我的问题是 我成功地能够在第一个单元格上显示秒表计时器 但是当我尝试在其中添加新单元格时UITableView所以我的计时器设置为第二个单元格 我无法定义如何让我的第一个计时
  • 在 iPhone 的日期选择器中插入空白值

    我有一个日期选择器 使用操作表显示 我想在日期选择器中插入一个空白值并将其设置为默认值 它应该仅根据用户选择而改变 这可能吗 如果是的话怎么办 感谢所有宝贵的建议 UIDatePicker 仅支持某些模式 并且不允许这种自定义 将空白或自定
  • 继承属性,从 readonly 继承的属性中读写时不会合成 setter

    我在使用属性时发现了一个奇怪的行为 该属性被继承为只读 然后在继承的类中重新声明为读写 In A h interface A NSObject property nonatomic strong readonly NSObject some
  • GameCenter 邀请处理程序

    尝试实现多人游戏 使用来自的样本游戏中心 发送和接收数据 https stackoverflow com questions 4574119 game center sending and receiving data 一切看起来都还好 但
  • UIView表面自定义变换/动画(如“水滴效果”)

    实施方式是什么自定义转换 动画 在视图表面 类似于所附图片 not只是视图边界 问题主要在于一般的方法是什么做到这一点 不完全是 水滴效应 但任何例子肯定会受到赞赏 我想 这是层布局 网格 的某种 算法 转换 但不确定以哪种方式 挖掘 它
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 如何使 UITableView 可重新排列?

    我正在尝试使我的 UITableView 可编辑 以便您可以移动单元格 现在 当我单击编辑按钮时 它只允许我删除 但不能重新排列 我有的方法有 Code BOOL tableView UITableView tableView canEdi
  • 在 iOS 7 中查看 Core Data 创建的 sqlite 文件时出现问题

    当我尝试访问由核心数据创建的数据库文件时遇到问题 DB 文件位于 Documents 文件夹中 我已将其复制到桌面并使用 Firefox 插件打开它 Hello sqlite文件不包含任何行我有使用核心数据插入值 我正在使用 iOS 7 模
  • UICollectionView 设置列数

    我刚刚开始学习 UICollectionViews 我想知道是否有人知道如何指定集合视图中的列数 默认设置为 3 iPhone 肖像 我查看了文档 似乎找不到简洁的答案 对于 Swift 5 和 iOS 12 3 您可以使用4 以下实现为了
  • 如何本地化 iOS 故事板

    我有一个包含一些视图的 iPhone 故事板 例如 导航项标题名为News 应翻译为其他语言 当我向故事板添加新的本地化版本时 它会为新语言创建当前故事板的副本 在这里我可以更改导航项的标题 但对我来说它似乎不太有用 如果我的故事板包含 1
  • 为什么 iPhone 应用程序的 main() 函数没有机会完成?

    考虑以下main 大多数 iPhone 应用程序都采用以下方法 int main int argc char argv NSAutoreleasePool pool NSAutoreleasePool alloc init int retV
  • Xcode - 发布和分发配置中的 Malloc_Error

    仅当我在设备上选择发布或分发配置时 我才会收到此错误 在模拟器上它运行良好 请问 我错在哪里 cc1obj 4113 malloc mmap size 429379584 failed error code 12 error can t a
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • iOS - 在相机上放置自定义叠加层(垂直对齐)。顶部黑条的大小

    我正在寻找以下问题的编程解决方案 我想在相机 iOS 上绘制自定义叠加层 我希望它位于相机输出视图的垂直中央 我已经完成了相对于屏幕而不是相机图片居中绘制自定义视图 为此 我需要获得顶部黑条的大小 我怎么才能得到它 顶部和底部栏的大小不相等
  • 自动生成的 Swift 桥接标头中“找不到接口声明”

    我当前的项目包含 Swift 和 Objective C 代码 两种类型的源文件都使用另一种语言的代码 当我进行完全清理并重新编译时 几乎每个 Swift 类声明都出现错误Module Swift h 形式为 Cannot find int

随机推荐