delphi - 如何确定什么调用了用户访问控制限制?

标签 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 警报

最佳答案

UAC 无法启动,因为您的应用程序执行了一些管理操作。许多人认为,当未提升的应用程序尝试执行[未提升时会失败但提升后会成功的操作]时,UAC 会询问提升。但事实并非如此。您的应用程序一开始会提升或不提升,并且会保持这种状态。如果它试图做某件事,但没有提升就失败了,那么这件事就会失败。这就是为什么添加和删除代码“仍然会导致 UAC 事件”。

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

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

关于delphi - 如何确定什么调用了用户访问控制限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386994/

相关文章:

Delphi TPath.GetTempPath 结果被裁剪

regex - 如何替换正则表达式匹配中的字符串

tomcat - 从命令行将 java_opts 设置为 tomcat 服务

delphi - 如何将一个Delphi项目正确划分成BPL?

delphi - 如何删除列表框中的重复项?

windows-7 - 在 Windows 7 上使用 XAMPP 设置 phpstorm 4

c# - 开发 Sharepoint Windows 窗体

winapi - 是否有 API 调用提示用户进行 UAC 提升?

c++ - 常见的可写应用程序文件放在哪里?

windows-7 - 如何将 UAC 盾牌图标添加到仍然必须以 XP 为目标的程序中?