gpt4 book ai didi

objective-c - Mountain Lion 特权助手守护进程状态

转载 作者:行者123 更新时间:2023-12-03 16:22:20 26 4
gpt4 key购买 nike

我正在构建一个适用于 10.8+ 的应用程序,其中必须修补文件。由于此功能,我创建了一个“PrivilegedHelperTool”并安装为 KeepLive = YES RunAtLoad = YES (因此它始终运行)。我还使用 XPC over mach 与 GUI 应用程序(菜单栏)进行通信

我希望能够检查“PrivilegedHelperTool”是否已安装并正在运行,到目前为止,我发现检查安装的最佳方法是在/Library/LaunchDaemons/中查找 plist 并检查二进制文件位于/Library/PrivilegedHelperTools 中。

这真的是最好的方法吗?

此外,我还没有找到可靠的方法来检查 PrivilegedHelperTool(以 root 身份运行)是否尚未成为 root(例如 sudo launchctl list)

我添加了一个使用 launch.h (/usr/include/launch.h) http://brockerhoff.net/blog/2009/02/02/cocoa-musings-pt-3/ 的包装器但它只返回用户进程,让最终用户升级权限只是为了检查某些“插件”是否正在运行似乎是错误的。

我能期望的最好结果是尝试与我的服务对话,如果它没有响应,就假设它“已损坏或未运行”,这是真的吗? (http://mac-os-forge.2317878.n4.nabble.com/Programmatic-interface-to-launchctl-and-some-other-questions-OS-X-10-5-tp189494p189496.html)

最佳答案

当您安装后台帮助程序守护程序时,您需要是 root 用户。因此,要么您的安装程序使用适当的权限来安装守护程序,要么当您启动应用程序时,您要求用户将自己授权为管理员,以便您可以即时安装守护程序。

这是一个从应用程序中获取根的代码片段。它会提示用户使用正常的用户名/密码对话框,您在从 pkg 安装某些内容时也会看到该对话框。

OSStatus myStatus;
uid_t uid = -1;
AuthorizationRights myRights;
AuthorizationFlags myFlags;
AuthorizationItem myItems[1];


uid = geteuid();
if(uid != 0)
{
myItems[0].name = "com.whatever";
myItems[0].valueLength = 0;
myItems[0].value = NULL;
myItems[0].flags = 0;
myRights.count = sizeof (myItems) / sizeof (myItems[0]);
myRights.items = myItems;
myFlags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagExtendRights |
kAuthorizationFlagPartialRights;
myStatus = AuthorizationCreate (&myRights, kAuthorizationEmptyEnvironment,myFlags,NULL);
}

关于objective-c - Mountain Lion 特权助手守护进程状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com