• Delphi 如何以管理员权限运行程序


            IT 时常会碰到一个困扰,就是当用户权限太大时,容易出现各种问题,比如乱装软件,病毒等问题。但权限太小,也很麻烦,时常要IT给用户装一些允许的软件。一下程序允许用户以管理员的身份安装IT允许用户自己安装的软件而不用给用户管理员密码。

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure FormActivate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

     type
    _STARTUPINFOW = record
    cb: DWORD;
    lpReserved: LPWSTR;
    lpDesktop: LPWSTR;
    lpTitle: LPWSTR;
    dwX: DWORD;
    dwY: DWORD;
    dwXSize: DWORD;
    dwYSize: DWORD;
    dwXCountChars: DWORD;
    dwYCountChars: DWORD;
    dwFillAttribute: DWORD;
    dwFlags: DWORD;
    wShowWindow: Word;
    cbReserved2: Word;
    lpReserved2: PByte;
    hStdInput: THandle;
    hStdOutput: THandle;
    hStdError: THandle;
    end;
    STARTUPINFOW = _STARTUPINFOW;
    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    function CreateProcessWithLogonW(lpUserName, lpDomain, lpPassword: LPCWSTR;
    dwLogonFlags: DWORD; lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;
    dwCreationFlags: DWORD; lpEnvironment: Pointer; lpCurrentDirectory: LPCWSTR;
    const lpStartupInfo: STARTUPINFOW; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
    external advapi32 Name 'CreateProcessWithLogonW'

    procedure TForm1.FormCreate(Sender: TObject);
    var
    STARTUPINFO: StartupInfoW;
    ProcessInfo: TProcessInformation;
    AUser, ADomain, APass, AExe: WideString;
    const
    LOGON_WITH_PROFILE = $00000001;
    LOGON_NETCREDENTIALS_ONLY = $00000002;
    begin
    FillChar(STARTUPINFO, SizeOf(StartupInfoW), 0);
    STARTUPINFO.cb := SizeOf(StartupInfoW);
    STARTUPINFO.dwFlags := STARTF_USESHOWWINDOW;
    STARTUPINFO.wShowWindow := SW_SHOW;
    AUser := 'administrator';
    ADomain := 'msic.com.cn';
    APass := 'xxxxxx';
    AExe := '\\it\tools\install_flash_player_ax.exe';
    if not CreateProcessWithLogonW(PWideChar(AUser), PWideChar(ADomain),
    PWideChar(APass),
    LOGON_WITH_PROFILE, nil, PWideChar(AExe),
    NORMAL_PRIORITY_CLASS, nil, nil, STARTUPINFO, ProcessInfo) then
    RaiseLastOSError;
    end;
    procedure TForm1.FormActivate(Sender: TObject);
    begin
    close;
    end;

    end.

  • 相关阅读:
    [BJWC2018]Border 的四种求法
    [51nod1847]奇怪的数学题
    [51nod1965]奇怪的式子
    [BZOJ3283]运算器
    [TJOI2015]概率论
    [SDOI2017]遗忘的集合
    [HDU5709]Claris Loves Painting
    [Atcoder AGC032C]Three Circuits
    [Atcoder ARC103D]Robot Arms
    [Atcoder AGC030C]Coloring Torus
  • 原文地址:https://www.cnblogs.com/kevinsun/p/1729044.html
Copyright © 2020-2023  润新知