Cocoa,从我的应用程序中启动一个包

时间:2013-12-25 16:58:32

标签: cocoa nstask

当我按下应用程序上的“开始”按钮时,我想启动一个包(.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的脚本,它可以工作!

0 个答案:

没有答案