3

条件如下:MacOSX 10.7 和 Cocoa 用objective-c 编写的图形应用程序。

我面临以下问题。我无法从 Cocoa 应用程序的 /user/bin 文件夹启动守护程序应用程序。我知道我应该有 root 权限才能做到这一点。

我有安装程序,不是 *.pkg,而是手动编写的安装程序应用程序。安装过程完成后,我需要启动我的守护进程。如何提高我在 Objective-C 应用程序中的权限级别?

我有这个代码。但是 AuthorizationExecuteWithPrivileges 调用已被弃用。

我们不应该使用它。

AuthorizationItem authItem      = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights  = { 1, &authItem };
AuthorizationFlags flags        = kAuthorizationFlagDefaults |
                                  kAuthorizationFlagInteractionAllowed |
                                  kAuthorizationFlagPreAuthorize |
                                  kAuthorizationFlagExtendRights;

AuthorizationRef authRef = NULL;

OSStatus status = AuthorizationCreate(&authRights,
kAuthorizationEmptyEnvironment, flags, &authRef);

status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe);

第二种方法是使用特权助手。对于我的情况,这种方式看起来非常复杂。我只需要在安装后启动守护进程。

当然,我可以要求用户重新启动 mac。但我想避免它。

其他可能性是守护程序可执行文件上的 SUID 位。但我认为这并不安全。

我的问题是:还有其他更简单的方法吗?

4

1 回答 1

2

好吧,这里可能会有答案。

你需要:

  1. 使用您的操作创建一个 shell 脚本。
  2. 创建一个苹果脚本NSString,您可以在其中请求执行 shell 脚本with administrator privilege
  3. 创建一个实例NSAppleScript并执行苹果脚本。

以下是更多详细信息:

AuthorizationExecuteWithPrivileges 已弃用

于 2013-03-21T20:26:30.213 回答