Delphi:需要时提示UAC提升

Delphi:需要时提示UAC提升,第1张

概述我们需要在运行时将一些设置更改为HKEY_LOCAL_MACHINE。 如果需要在运行时提示uac提升,或者我必须启动第二个提升的过程做’脏工作’吗? 我会重新启动自己作为提升,通过命令行参数指示什么高架的事你想做。然后,您可以直接跳到相应的表单,或只保存您的HKLM的东西。 function RunAsAdmin(hWnd: HWND; filename: string; Parameters: 我们需要在运行时将一些设置更改为HKEY_LOCAL_MACHINE。

如果需要在运行时提示uac提升,或者我必须启动第二个提升的过程做’脏工作’吗?

解决方法 我会重新启动自己作为提升,通过命令行参数指示什么高架的事你想做。然后,您可以直接跳到相应的表单,或只保存您的HKLM的东西。
function RunAsadmin(hWnd: HWND; filename: string; Parameters: string): Boolean;{    See Step 3: Redesign for UAC Compatibility (UAC)    http://msdn.microsoft.com/en-us/library/bb756922.aspx    This code is released into the public domain. No attribution required.}var    sei: TShellExecuteInfo;begin    ZeroMemory(@sei,SizeOf(sei));    sei.cbSize := SizeOf(TShellExecuteInfo);    sei.Wnd := hwnd;    sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;    sei.lpVerb := PChar('runas');    sei.lpfile := PChar(filename); // PAnsiChar;    if parameters <> '' then        sei.lpParameters := PChar(parameters); // PAnsiChar;    sei.nShow := SW_SHOWnorMAL; //Integer;    Result := ShellExecuteEx(@sei);end;

另一个Microsoft建议的解决方案是创建一个COM对象的进程(使用特别创建的CoCreateInstanceAsadmin函数)。我不喜欢这个想法,因为你必须写和注册一个COM对象。

注意:没有“CoCreateInstanceAsadmin”API调用。它只是一些浮动的代码。这里是Dephi版本我偶然发现。它显然是基于前缀一个类guID字符串与“Elevation:administrator!new:”前缀的技巧,当正常隐藏代码内部调用CoGetobject:

function CoGetobject(pszname: PWIDeChar; pBindOptions: PBindOpts3;       const iID: TIID; ppv: PPointer): HResult; stdcall; external 'ole32.dll';procedure CoCreateInstanceAsadmin(const Handle: HWND;       const ClassID,IID: TGuID; PInterface: PPointer);var   BindOpts: TBindOpts3;   Monikername: WIDeString;   Res: HRESulT;begin   //This code is released into the public domain. No attribution required.   ZeroMemory(@BindOpts,Sizeof(TBindOpts3));   BindOpts.cbStruct := Sizeof(TBindOpts3);   BindOpts.hwnd := Handle;   BindOpts.DWClassContext := CLSCTX_LOCAL_SERVER;   Monikername := 'Elevation:administrator!new:' + GUIDToString(ClassID);   Res := CoGetobject(PWIDeChar(Monikername),@BindOpts,IID,PInterface);   if Failed(Res) then       raise Exception.Create(SysErrorMessage(Res));end;

另一个问题:如何处理在windows XP中作为标准用户运行的人员?

总结

以上是内存溢出为你收集整理的Delphi:需要时提示UAC提升全部内容,希望文章能够帮你解决Delphi:需要时提示UAC提升所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1281832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存