通过安装程序安装 .pkg 文件 osx 时出现问题

通过安装程序安装 .pkg 文件 osx 时出现问题

我有一个需要安装的 .pkg。这主要用于更新具有多个组件的应用程序。pkg 包含 Agent、Daemon 和一个助手。在 Post 脚本中,我通过 Sudo $USER launchctl load /Library/LaunchAgent/myApp.plist 启动 Agent。我想自动安装 pkg。安装程序命令行用于安装此 pkg。当我从 Xcode 运行应用程序并且 pkg 已干净安装时,这可以正常工作。

但是当我没有在 Xcode 中从调试模式运行我的应用程序并且我的应用程序已安装时,我尝试在辅助工具的帮助下安装 pkg(以 root 身份运行),安装程序命令正在执行。但问题在于代理的加载。代理从未启动。

但是当我使用 Su 命令而不是 SUDO 命令来加载使用
su -l $USER -c "/bin/launchctl load /Library/LaunchAgents/myApp.plist" 的代理时,代理就会启动。

但是我在使用 SU 时遇到了问题,辅助工具安装随后失败。

那么 1. 为什么当从以 root 身份运行的工具运行 SUDO 命令时会失败并且无法加载代理。(该工具由守护进程启动)。

  1. 如果我通过 SU 加载代理,我的辅助工具安装将失败。

更新:::: 我能够启动代理。但问​​题仍然存在,因为尝试进行身份验证的辅助工具安装失败。这是身份验证代码:AuthorizationRef authRef = NULL; AuthorizationItem authItem = { kSMRightBlessPrivilegedHelper, 0, NULL, 0 }; AuthorizationRights authRights = { 1, &authItem }; AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;

OSStatus status=AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess) 
{
    DLog(@"Failed to create AuthorizationRef, return code %i", status);
}
else
{
    result = SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)label, authRef, &outError);
    if (!result && error)
    {
        *error = (__bridge NSError *)(outError);
    }
}

相关内容