我正在开发一个OS Fire猴子应用程序,它需要启动" OpenVPN ",但是OpenVPN需要管理员权限来创建隧道接口。
我正在尝试将这篇博客文章中的第一个示例转换为Delphi:http://www.michaelvobrien.com/blog/2009/07/authorizationexecutewithprivileges-a-simple-example/
尝试运行此代码时,有时会像预期的那样产生授权提示,但单击OK会完全冻结调试器,整个系统需要关闭。在没有调试器的情况下运行会更好,但有时还是会冻结.在返回代码崩溃几次之前,我捕获了它的返回代码,它是errAuthorizationToolExecuteFailure
我不太熟悉OSX是怎么做的,有没有更好的方法?苹果不建议在这方面使用AuthorizationExecuteWithPrivileges。我不知道用它需要的权限运行openvpn的任何其他方式。
uses
Macapi.CoreFoundation, Macapi.Foundation, Macapi.Security;const
kAuthorizationEmptyEnvironment = nil;
procedure TForm1.Button1Click(Sender: TObject);
var
AuthRef: AuthorizationRef;
Status: OSStatus;
begin
Status := AuthorizationCreate(nil,kAuthorizationEmptyEnvironment,kAuthorizationFlagDefaults,@AuthRef);
Status := AuthorizationExecuteWithPrivileges(AuthRef,'/sbin/dmesg',0,'',nil)
end;发布于 2016-03-23 09:48:55
arguments参数AuthorizationExecuteWithPrivileges需要一个指向以零指针作为最后一个数组项的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;https://stackoverflow.com/questions/35870961
复制相似问题