微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在标准用户帐户Delphi中以管理员身份运行外部程序

如何解决在标准用户帐户Delphi中以管理员身份运行外部程序

我有一个代码可以帮助我以管理员身份运行外部程序。如果运行我的程序的用户管理员,它可以顺利运行。

procedure RunApp;
const
  Notepadpath = 'C:\windows\system32\notepad.exe';
var
  SI: TStartupInfo;
  PI: TProcessinformation;
begin
  ZeroMemory(@SI,SizeOf(SI));
  SI.cb := SizeOf(SI);
  CreateProcess(PChar(Notepadpath),nil,false,CREATE_NEW_PROCESS_GROUP or norMAL_PRIORITY_CLASS,SI,PI);
end;

begin
  Host := ParamStr(0);

  FillChar(SEI,SizeOf(SEI),0);
  SEI.cbSize := SizeOf(SEI);
  SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
{$IFDEF UNICODE}
  SEI.fMask := SEI.fMask or SEE_MASK_UNICODE;
{$ENDIF}
  SEI.Wnd := 0;
  SEI.lpVerb := 'runas';
  SEI.lpFile := PChar(Host);
  SEI.nShow := SW_norMAL;

  if IsUserAnAdmin then begin
    RunApp;
    Exit;
  end;

  if not ShellExecuteEx(@SEI) then begin
    SetEnvironmentvariable('__COMPAT_LAYER','RUNASINVOKER');
    RunApp;
  end;
end.

但是,当我以标准用户身份运行我的程序时,UAC 会提示,在 UAC 中输入管理员密码后,外部程序将自动运行在我的管理员用户桌面而不是我当前的标准用户帐户桌面。

>

情况:用户1(管理员)和用户2(非管理员)都登录了我的电脑。 在 User2 中,我运行那个 delphi 程序,UAC 提示外部应用程序(预期行为),我决定作为外部应用程序的管理员运行,所以我输入我的管理员密码。

发生了什么?:我的外部应用程序的窗口在 User1 桌面而不是 User2 桌面中打开。 这种行为是否正确?如果不是,可能是什么原因造成的?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。