我正在尝试SMJobSubmit
从普通桌面应用程序中启动我在 Xcode 中制作的 Unix 可执行文件。(GUI 部分应该调用命令行帮助工具。)
这是我用来尝试提交工作的代码。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[authView setString:kSMRightModifySystemDaemons];
[authView setAutoupdate:YES];
[authView setDelegate:self];
}
- (IBAction)pressedButton:(id)sender
{
/*
authView is an instance of SFAuthorizationView. At this point, the user
already clicked the padlock and entered his password.
*/
authRef = [[authView authorization] authorizationRef];
//toolPath points to the file in the app's Resource folder.
NSArray* call = [NSArray arrayWithObject:toolPath];
NSDictionary* jobSpec = [NSDictionary dictionaryWithObjectsAndKeys:
call, @"ProgramArguments",
jobLabel, @"Label",
[NSNumber numberWithBool:YES], @"RunAtLoad",
nil];
CFErrorRef submitError = nil;
BOOL submitResult = SMJobSubmit(kSMDomainSystemLaunchd,
(__bridge CFDictionaryRef)(jobSpec),
authRef,
&submitError);
if(!submitResult)
{
NSLog(@"Job submit failed. %@", submitError);
return;
}
}
submitResult
总是结果是true
,但我的程序似乎永远不会执行。我已经通过终端手动执行了我的程序,它运行良好;帮助工具应该将文件写入文件系统上的某个位置并且不带任何参数。但是,当我将它发送到启动守护程序时,什么也没有发生。它被标记为可执行。我也验证了路径。这是正确的。
那么,我想知道启动守护程序是否只能运行某些类型的文件?除非我在代码中搞砸了。