【问题标题】:2 Identical Programs; Only 1 asks for elevation2个相同的程序;只有 1 人要求提升
【发布时间】:2011-09-29 05:06:26
【问题描述】:

在 win32 (mingw) 上编译我的程序时遇到了一个有趣的问题。 我有 2 个相同的项目,都是在 C::B 中创建的。编译一个时,它运行得很好,不需要提升权限,但另一个提示用户“允许程序对计算机等进行更改”对话框。我希望该应用程序不提示用户,因为它不需要提升权限。

这是在 Win7 x64 下。

这可能是 Code::Blocks 问题还是编译器问题?

谢谢!

【问题讨论】:

  • 程序是否真的相同(例如,md5sum 是否在两者上返回相同的值)?可能是您在其中一个中嵌入了清单,而不是在另一个中。
  • 不,两个文件的 MD5 不同:/ 但是我看不出如何嵌入清单;它们都是作为新项目启动的,并且代码从第一个项目复制并粘贴到第二个项目。
  • 解决了! Windows 7 将名称中带有“更新”的任何内容标记为需要管理员权限的内容。我没想到会这样。但是将文件重命名为随机字符串似乎比有用的描述性名称更有效.....
  • @Dylan:我认为您应该发布您的解决方案作为答案并接受它。
  • Windows 7(或 Vista)使用某些方法来尝试猜测程序是否需要提升(作为与旧程序兼容的一种方式)。在这些方法中,如果程序名称或版本资源包含诸如“setup”、“install”或“update”之类的词,它似乎会被捕获。这是一个先前的问题,它回答了如何在不重命名的情况下解决它:stackoverflow.com/questions/533939/…

标签: c++ mingw uac codeblocks


【解决方案1】:

事实证明,Win7 将名称中带有“更新”(不区分大小写)的文件标记为需要提升的权限。所以是的,未来值得知道

【讨论】:

  • 我认为像“setup”或“install”这样的文件名也需要提升权限。
  • 还有“补丁”,这对于我们这些使用 Win32 版本 coreutils 工具的人来说尤其烦人 :(
【解决方案2】:

正如您已经发现的那样,Windows 会检测到它认为是安装程序的某些应用程序名称,并尝试帮助它们预先提升它们以确保它们成功。

但是,只有在 Win32 清单中缺少 UAC 信息的可执行文件才启用此行为。因此,如果您的程序具有受影响的名称之一,只需为其提供包含相关 UAC 信息的清单,您就不会收到不需要的提示。

例如Aaron 的博客http://brethorsting.com/blog/2007/02/meet_uac_-_creating_a_uac_manifest/

马丁

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2015-09-28
    • 2012-12-28
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多