当我按下应用程序上的“开始”按钮时,我想启动一个包(.pkg扩展名)。有问题的包在我的资源文件夹中。第一个是初步任务,另一个是在流程结束时。它们没有有效负载,但只执行其中的脚本。 我会在bash中这样做:
installer -pkg $Resource_folder/package/info.pkg -target /
installer -pkg $Resource_folder/package/post.pkg -target /
......我怎么能在可可做到这一点? 考虑到“installer”命令还提供了“-target”选项:
- (IBAction)runpackage:(id)sender
{
/*
NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/usr/sbin/installer";
NSString* package_path = [[NSBundle mainBundle] pathForResource:@"pakage/info" ofType:@"pkg"];
NSLog(@"%@", package_path);
[task setArguments:[[[NSArray alloc] initWithObjects:
@"-pkg", package_path, @"-target", @"/", nil]
autorelease]];
[task launch];
[task waitUntilExit];
*/
OSStatus status;
AuthorizationRef authorizationRef;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
kAuthorizationFlagDefaults, &authorizationRef);
if (status != errAuthorizationSuccess)
NSLog(@"Error Creating Initial Authorization: %d", status);
AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0};
AuthorizationRights rights = {1, &right};
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);
if (status != errAuthorizationSuccess)
NSLog(@"STUFF Copy Rights Unsuccessful: %d", status);
NSString* path_STUFF = [[NSBundle mainBundle] pathForResource:@"runAllMypackage" ofType:@"sh"];
char *tool = "/bin/bash";
char *args[] = {NULL};
FILE *pipe = NULL;
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
kAuthorizationFlagDefaults, args, &pipe);
if (status != errAuthorizationSuccess)
NSLog(@"Error: %d", status);
status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
}
我编辑了这个例子来执行一个运行我的pkg的脚本,它可以工作!