LSCopyApplicationURLsForURL不适用于root

时间:2011-07-11 11:04:37

标签: cocoa

当我以root身份运行带有调试可执行文件的xcode时,LSCopyApplicationURLsForURL没有返回所有应用程序。如果运行admin,它将返回所有已安装的应用程序。

为什么这种奇怪的行为有任何想法。

此致 阿克

1 个答案:

答案 0 :(得分:1)

Mac OS X系统上的每个用户都有自己的Launch Services数据库缓存文件。一个用户的当前“已安装”(或已知)应用程序的确切集合可能不一定与另一个用户(包括root用户)的已知应用程序集匹配。您可能需要包装LS命令,如下面的代码所示:

int err = 0;
uid_t uid = getuid();
uid_t euid = geteuid();

if (uid != euid) {
    err = seteuid(uid);
    if (err != 0) {
        NSLog(@"seteuid(uid) returned %d", err);
    }
}

// do your LS commands, etc.

// then restore root privs:
err = seteuid(euid);
if (err != 0) {
    NSLog(@"seteuid(euid) returned %d", err);
}

(请注意,我假设您没有以root用户身份登录GUI,在这种情况下上面的方法不起作用,因为uid和euid都是相同的)。