2012-04-30 22 views
0

我正在尝试为OS X创建安装程序。为了能够写入由根(/ Applications,/ Library ...)所拥有的目录,我正在使用安全框架中的授权服务。以下代码对管理员用户正常工作但对标准用户失败。权限的创建没有错误消息,但该进程仍然以较低的权限运行(没有文件写入提到的位置)。OS X,从标准用户启动时,应用程序无法获得root previliges

当然,我使用admin用户的登录名/密码进行验证。

AuthorizationRef authRef; 

    char rightName[] = "system.install.root.user"; 
    AuthorizationItem kActionRight = { rightName, 0, 0, 0 }; 
    AuthorizationRights rights = {1, &kActionRight}; 
    AuthorizationFlags flags=kAuthorizationFlagExtendRights|kAuthorizationFlagInteractionAllowed; 

    OSStatus err = AuthorizationCreate(&rights, 0, flags, &authRef); 

    // [ write to a file in /Applications; doesn't work with standard users ] 

    if (authRef != 0) 
     AuthorizationFree(authRef, kAuthorizationFlagDestroyRights);  

我知道有使用AuthorizationExecuteWithPrivileges()的例子,但因为这是OS X 10.7不赞成我宁愿避免使用它。任何想法我做错了什么,或者我需要做什么来获得root权限?

感谢您的帮助,

克里斯

回答

0

也许你需要使用的,而不是写自己的安装程序PackageMaker。这节省了您的时间......并且依赖于您的要求,您可以使用HelperTools,它会自动将二进制文件复制到/ Library ...

+0

这是一个web安装程序,因此PackageMaker不是真正的选项。我会看看HelperTools。 – user1365581

+0

什么是webinstaller? – toohtik

相关问题