Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:执事不开始_Objective C_Macos_Service - Fatal编程技术网

Objective c 目标C:执事不开始

Objective c 目标C:执事不开始,objective-c,macos,service,Objective C,Macos,Service,我已经开发了一个在Mac开始时运行的Deamon,在我安装了新的OSX 10.8.5之前,这个Deamon可以正确运行[这个Deamon可以正确运行10.8.4] 我不知道我的错误在哪里 我已经创建了一个终端应用程序,可以编写这样的词典: KeepAlive = 1; Label = "vetrya.ControlloPresenza"; MachServices = { "vetrya.ControlloPresenza" = 1; }; Program = "/System/

我已经开发了一个在Mac开始时运行的Deamon,在我安装了新的OSX 10.8.5之前,这个Deamon可以正确运行[这个Deamon可以正确运行10.8.4]

我不知道我的错误在哪里

我已经创建了一个终端应用程序,可以编写这样的词典:

KeepAlive = 1;
Label = "vetrya.ControlloPresenza";
MachServices =     {
    "vetrya.ControlloPresenza" = 1;
};
Program = "/System/Library/VetryaControllo/ControlloPresenza";
ProgramArguments = start;
RunAtLoad = 1;
StartInterval = 20;
inetdCompatibility =     {
    Wait = 0;
};
 NSTask *task;
    task = [[NSTask alloc] init];
    [task setLaunchPath:_registrationPath];
    [task setArguments: @[@"sudo", @"chown",@"root:wheel",@"vetrya.ControlloPresenza.plist"]];

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

    NSFileHandle *file;
    file = [pipe fileHandleForReading];
    [task launch];
    [task waitUntilExit];

    task = [[NSTask alloc] init];
    [task setLaunchPath:_registrationPath];
    [task setArguments: @[@"sudo", @"chmod",@"644",@"vetrya.ControlloPresenza.plist"]];

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

    file = [pipe fileHandleForReading];
    [task launch];
    [task waitUntilExit];
然后将该命令写入该目录:/System/Library/LaunchDaemons/

但是现在这个过程还没有开始,有人知道原因吗

这就是我写的格言和战争的结果写对了

NSMutableArray* arrayArguments = [[NSMutableArray alloc] initWithCapacity:1];
[arrayArguments addObject:@"/System/Library/VetryaControllo/ControlloPresenza"];
[arrayArguments addObject:@"start"];
NSDictionary* dict = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithBool:NO],@"Wait", nil];
NSDictionary* dictNew = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"vetrya.ControlloPresenza", nil];

[self.controlloPresenza setObject:@"vetrya.ControlloPresenza" forKey:@"Label"];
[self.controlloPresenza setObject:@"/System/Library/VetryaControllo/ControlloPresenza" forKey:@"Program"];
[self.controlloPresenza setObject:@"start" forKey:@"ProgramArguments"]; 
[self.controlloPresenza setObject:dict forKey:@"inetdCompatibility"];
[self.controlloPresenza setObject:dictNew forKey:@"MachServices"];
[self.controlloPresenza setObject:[NSNumber numberWithBool:YES] forKey:@"KeepAlive"];
[self.controlloPresenza setObject:[NSNumber numberWithBool:YES] forKey:@"RunAtLoad"];
[self.controlloPresenza setObject:[NSNumber numberWithInt:20] forKey:@"StartInterval"];
我现在做了一些修改,建议如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>vetrya.ControlloPresenza</string>
    <key>MachServices</key>
    <dict>
        <key>vetrya.ControlloPresenza</key>
        <true/>
    </dict>
    <key>Program</key>
    <string>/System/Library/VetryaControllo/ControlloPresenza</string>
    <key>ProgramArguments</key>
    <string>start</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>20</integer>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <false/>
    </dict>
</dict>
</plist>
但最后我有一个错误:失败:22,“无效参数”。 我该怎么写这封信


关于

问题中显示的示例可能是您刚刚忽略了这一点,因为您说您正在写入值,但如果您阅读上的Apple文档,您会发现plist要求您指定键和值,如下所示:-

<key>KeepAlive</key>
<integer>1</integer>
<key>Label</key>
<string>"vetrya.ControlloPresenza"</string>
KeepAlive
1.
标签
“vetrya.Controlopresenza”
此外,如果您正在这样做,我看到您将程序参数设置为值,而不是字符串数组,这将使它:

<key>ProgramArguments</key>
<array>
    <string>start</string>
</array>
编程参数
开始

Console.app中是否存在任何错误消息,以提示它为什么不工作?什么都没有发生,进程没有启动,执事也没有启动。。。。比如说,如果这个plist不存在于系统目录中,而您根本没有得到任何日志?(
/var/log/system.log
)。我觉得这很奇怪;OSX非常“健谈”。没有关于启动时的执事……我不明白为什么您在不监听套接字时使用
inetdCompatibility
选项?你想让你的守护进程一直保持不动吗?(如果是这样,您将需要
)。您使用
launchctl
(如下)显示错误-您必须先使其正常工作,然后才能期望系统自动运行您的守护程序。否,因为您会看到一个Dictionary标记,当你用dict写plist时,我写的是正确的……你能把你的代码写的plist的输出贴出来吗?我已经用plistIn修改了原来的帖子,在你写的第一条评论中,你写了“你看到了字典的图章”;我不明白你的意思,你能解释一下吗?我创建了一个“终端程序”,创建了一个plist-end,将它插入currect-dir,在程序代码中我创建了一个dict调用“controlloPresenza”[可以在我的帖子中显示这个dict]。然后我在currect目录中写入dict。当我说你可以看到dict的图章时,我说的是NSlog(@“%@”,self.controlloPresenza)。
<key>ProgramArguments</key>
<array>
    <string>start</string>
</array>