首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自可可的sudo chmod命令

来自可可的sudo chmod命令
EN

Stack Overflow用户
提问于 2013-11-19 01:38:14
回答 3查看 2K关注 0票数 2

我想从我的Cocoa项目中运行以下命令。(隐藏聚光灯图标)

代码语言:javascript
复制
sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search

我找到了两种方法来调用命令并获得以下输出

1)使用NSTask

代码语言:javascript
复制
NSTask *writeTask = [[NSTask alloc] init];
[writeTask setLaunchPath:@"/bin/chmod"];

[writeTask setArguments: @[@"755",@"/System/Library/CoreServices/Search.bundle/Contents/MacOS/Search"]];

[writeTask launch];

>>chmod: Unable to change file mode on /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search: Operation not permitted

2)喉管

代码语言:javascript
复制
NSString *command = @"sudo chmod 755/System/Library/CoreServices/Search.bundle/Contents/MacOS/Search";
fp = popen([command UTF8String], "r");

>>sudo: no tty present and no askpass program specified

我还没有找到一种方法,如何运行这些超级用户模式。如何提示用户输入密码,并最终以所需权限运行此命令?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-19 06:32:01

使用Apple Script Editor编写下面的apple脚本,并将其保存在.scpt文件中。

代码语言:javascript
复制
do shell script "sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search" with administrator privileges

现在将此文件添加到包中。

然后,要从程序中调用此脚本,请使用以下代码:

代码语言:javascript
复制
- (void) runEmbeddedScriptFile: (NSString*)fileName
{
    NSString* path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"scpt"];
    NSURL* url = [NSURL fileURLWithPath:path];
    NSDictionary* errors = [NSDictionary dictionary];
    NSAppleScript* appleScript = [[NSAppleScript alloc] initWithContentsOfURL:url error:&errors];
   [appleScript executeAndReturnError:nil];
   [appleScript release];
}

这将提示用户的密码请求。

票数 1
EN

Stack Overflow用户

发布于 2013-11-19 02:40:21

在10.7之前,您可以使用AuthorizationExecuteWithPrivileges()执行具有特权的任务。然而,这在10.7中已被否决,苹果建议使用ServiceManagement框架来执行特权任务。

SMJobBless演示如何安全地安装执行特权操作的助手工具,以及如何将该工具与调用该工具的应用程序关联。 SMJobBless使用MacOSXv10.6雪豹中引入的ServiceManagement.framework。 对于雪豹来说,这是管理Mac上权限提升的首选方法,应该使用它来代替早期的方法,比如BetterAuthorizationSample或直接调用AuthorizationExecuteWithPrivileges。

苹果的样本代码

票数 2
EN

Stack Overflow用户

发布于 2013-11-19 11:09:41

您需要使用授权服务获取根权限,然后使用sys/stat.h中的chmod()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20061526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档