首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firemonkey请求提升权限

Firemonkey请求提升权限
EN

Stack Overflow用户
提问于 2016-03-08 15:08:34
回答 1查看 208关注 0票数 4

我正在开发一个OS Fire猴子应用程序,它需要启动" OpenVPN ",但是OpenVPN需要管理员权限来创建隧道接口。

我正在尝试将这篇博客文章中的第一个示例转换为Delphi:http://www.michaelvobrien.com/blog/2009/07/authorizationexecutewithprivileges-a-simple-example/

尝试运行此代码时,有时会像预期的那样产生授权提示,但单击OK会完全冻结调试器,整个系统需要关闭。在没有调试器的情况下运行会更好,但有时还是会冻结.在返回代码崩溃几次之前,我捕获了它的返回代码,它是errAuthorizationToolExecuteFailure

我不太熟悉OSX是怎么做的,有没有更好的方法?苹果不建议在这方面使用AuthorizationExecuteWithPrivileges。我不知道用它需要的权限运行openvpn的任何其他方式。

代码语言:javascript
复制
uses
  Macapi.CoreFoundation, Macapi.Foundation, Macapi.Security;
代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 09:48:55

arguments参数AuthorizationExecuteWithPrivileges需要一个指向以零指针作为最后一个数组项的PAnsiChars数组的指针。您只是传递一个指向空字符串的指针。这将给您带来随机崩溃,具体取决于指向空字符串的指针之后内存中发生的情况。

试试这个:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35870961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档