在标准用户帐户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 (将#修改为@)