我正在为 MacOSX(使用 Qt 和 C++)编写安装程序/自动更新程序。我需要升级权限才能覆盖 app 文件夹中的旧文件。
我的升级代码基于以下示例: http: //www.michaelvobrien.com/blog/2009/07/authorizationexecutewithprivileges-a-simple-example/ 我尝试使用管理员权限重新启动我现有的应用程序,如下所示:
void MainDialog::EscalatePrivileges()
{
AuthorizationRef authorizationRef;
OSStatus status;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
char* tool = QApplication::instance()->applicationFilePath().toLocal8Bit().data();
char* args[] = { "STARTUPDATE", NULL };
FILE* pipe = NULL;
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, AuthorizationFlagDefaults, args, &pipe);
QApplication::instance()->quit();
}
但是,我收到错误 -60031(无法启动工具)。问题:
a) 为什么会失败?我怀疑是因为工作文件夹设置不正确...?(我可以以某种方式设置工具的工作文件夹吗?)
编辑: 好的,想通了: args[] - 数组本身需要以 NULL 结尾。已经在上面的代码中修复了。
b) 其他互联网消息来源称,AuthorizationExecuteWithPrivileges 功能已被弃用,出于安全考虑不应使用。有人可以举例说明如何以更好的方式做到这一点吗?