如何确定调用用户访问控制限制的内容?

时间:2010-03-05 13:24:49

标签: delphi windows-7 uac

在旨在为我的软件构建互联网软件更新服务的Delphi应用程序中,Windows 7 UAC系统请求用户授权运行exe。代码中存在以下可能存在争议/风险的区域:

  • 为通信创建命名管道服务器
  • TCP用于FTP和HTTP
  • 使用SHGetSpecialFolderPath api调用

在添加UAC未激活的这些项目之前,依次删除每个单元引用,然后以裸骨骼exe结束仍然会导致UAC事件 - 因此无法说明导致它的原因。除此之外,Delphi 2007现在需要以管理员身份启动,以启动应用程序的调试过程。

问题1:除了在新的exe中从头开始之外,我如何才能看到导致这种情况的原因-IOW是否有我可以检查的日志

问题2:使用authenticode使用签名的exe仍然会导致UAC警报显示

2 个答案:

答案 0 :(得分:7)

UAC无法启动,因为您的应用是管理性的。许多人认为,当一个没有升级的应用程序试图做[某些事情会导致非升高并成功升级]时,UAC会要求提升。但事实并非如此。您的应用程序是否从高处开始提升,并保持这种状态。如果它试图做一些没有提升而失败的事情,那么事情就会失败。这就是添加和删除代码“仍导致UAC事件”的原因。

真正“导致UAC事件”的是你的exe的属性,而不是它包含的代码。这些包括它的名称,您故意应用的兼容性内容(通过右键单击并检查某些选项)以及系统为您应用的兼容性内容(通常在其中一个“此应用程序可能无法正确运行”对话框之后)。人们常常发现确定哪一个导致它非常令人沮丧。

首先重命名exe,避免设置和更新等字样。您不需要运行它,顺便说一句 - 只需在Windows资源管理器中的图标上查找屏蔽覆盖。 (请参阅http://www.gregcons.com/KateBlog/NamingMattersAnotherCauseOfTheOverlayIcon.aspx)同样右键单击它并选择“属性”,然后查看“兼容性”选项卡。你可能要求它提升那里。

答案 1 :(得分:3)

我想你提出了错误的问题。

你不需要与UAC及其启发式战斗。它们是旧应用程序的兼容性攻击,而不是新的。新应用必须遵守规则。

包括manifest with "asInvoker" execution level - 您已经完成了。简单且100%有效。