Macos Firemonkey OS X-请求提升的权限
我正在开发一个OS X Firemonkey应用程序,它需要启动“openvpn”,但openvpn需要管理员权限才能创建隧道接口 我正在尝试将此博客文章中的第一个示例转换为Delphi: 尝试运行此代码时,有时会出现预期的授权提示,但单击“确定”会完全冻结调试器,需要关闭整个系统的电源。它在没有调试器的情况下运行会更好,但有时仍然会冻结。。。 在返回代码崩溃几次之前,我已经捕捉到了它,它是ErraAuthorizationToolExecuteFailure 我不太熟悉OSX是如何工作的,有更好的方法吗?苹果不建议为此使用Macos Firemonkey OS X-请求提升的权限,macos,delphi,firemonkey,Macos,Delphi,Firemonkey,我正在开发一个OS X Firemonkey应用程序,它需要启动“openvpn”,但openvpn需要管理员权限才能创建隧道接口 我正在尝试将此博客文章中的第一个示例转换为Delphi: 尝试运行此代码时,有时会出现预期的授权提示,但单击“确定”会完全冻结调试器,需要关闭整个系统的电源。它在没有调试器的情况下运行会更好,但有时仍然会冻结。。。 在返回代码崩溃几次之前,我已经捕捉到了它,它是ErraAuthorizationToolExecuteFailure 我不太熟悉OSX是如何工作的,有
授权ExecuteWithPrivileges
。我不知道有什么其他方法可以运行openvpn并拥有它所需要的权限
uses
Macapi.CoreFoundation, Macapi.Foundation, Macapi.Security;
AuthorizationExecuteWithPrivileges
的arguments
参数需要指向以nil指针作为最后一个数组项终止的PAnsiChars数组的指针。您只需传递一个指向空字符串的指针。根据指针指向空字符串后内存中发生的情况,这将导致随机崩溃
试试这个:
procedure TForm1.Button1Click(Sender: TObject);
var
AuthRef: AuthorizationRef;
Status: OSStatus;
argv: array[0..0] of PAnsiChar;
begin
ArgV[0] := nil;
AuthRef := nil;
Status := AuthorizationCreate(nil,kAuthorizationEmptyEnvironment,kAuthorizationFlagDefaults,@AuthRef);
Status := AuthorizationExecuteWithPrivileges(AuthRef, '/sbin/dmesg', 0, @argv[0], nil);
AuthorizationFree(AuthRef, kAuthorizationFlagDefaults);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
AuthRef: AuthorizationRef;
Status: OSStatus;
argv: array[0..0] of PAnsiChar;
begin
ArgV[0] := nil;
AuthRef := nil;
Status := AuthorizationCreate(nil,kAuthorizationEmptyEnvironment,kAuthorizationFlagDefaults,@AuthRef);
Status := AuthorizationExecuteWithPrivileges(AuthRef, '/sbin/dmesg', 0, @argv[0], nil);
AuthorizationFree(AuthRef, kAuthorizationFlagDefaults);
end;