帮助理解为什么我们的应用程序在Win7上弹出UAC对话框

2023-11-22

我们有一个 C++ 非托管应用程序,它似乎会导致 UAC 提示。似乎发生在Win7 而非 Vista

不幸的是,UAC dlg 是系统模式的,所以我无法附加调试器来检查代码所在的位置,并且在 msdev 下运行(我们使用的是 2008)以提升模式运行。

我们在程序/winmain 的开头放置了一个消息框,但它甚至没有达到那么远,所以显然这是在启动代码中。

是什么导致 UAC 通知这么早?我还可以采取哪些其他措施来查明原因?

EDIT

显然清单是这里的一个重要问题,但它似乎对我没有帮助 - 或者也许我没有正确配置清单文件。

有人可以提供样本清单吗?

另外,链接器/UAC 是否会发现程序“可能”写入注册表并据此设置其 UAC 要求?有些代码路径可能会触发 UAC,但当 UAC dlg 出现时,我们甚至还没有达到这一点。

另一个奇怪的是,在打开 UAC 的 Vista 上似乎不会发生这种情况。

这是一个清单(我认为是自动生成的):

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
    </dependentAssembly>
  </dependency>
</assembly>

然后将这个添加到清单列表中,看看是否有帮助

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="x86" 
    name="[removed for anonymity]" 
    type="win32" 
/> 
<description>
    [removed for anonymity]
</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity 
            type="win32" 
            name="Microsoft.Windows.Common-Controls" 
            version="6.0.0.0" 
            processorArchitecture="x86" 
            publicKeyToken="6595b64144ccf1df" 
            language="*" 
        />
    </dependentAssembly>
</dependency>
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>        
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

以下是使用ManifestViewer工具的实际EXE

- <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="[removed]" type="win32" /> 
  <description>[removed]</description> 
- <dependency>
- <dependentAssembly>
  <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> 
  </dependentAssembly>
  </dependency>
- <dependency>
- <dependentAssembly>
  <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> 
  </dependentAssembly>
  </dependency>
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
- <security>
- <requestedPrivileges>
  <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
  </requestedPrivileges>
  </security>
  </trustInfo>
  </assembly>

看来这可能是由于我们应用程序上的 xp 兼容性设置造成的。我必须测试一下。 (我们在安装程序中进行了设置,我发现这是因为某些声音驱动程序在win7上无法正常工作)


Windows 根据各种标准自动提升应用程序(列于了解和配置 Windows Vista 中的用户帐户控制):

在创建 32 位进程之前, 检查以下属性 来判断它是否是一个 安装人员:

  • 文件名包含“安装”、“设置”、“更新”等关键字。
  • 以下版本控制资源字段中的关键字:供应商、公司名称、产品名称、文件描述、原始文件名、内部名称和导出名称。
  • 嵌入在可执行文件中的并行清单中的关键字。
  • 可执行文件中链接的特定 StringTable 条目中的关键字。
  • 可执行文件中链接的 RC 数据中的关键属性。
  • 可执行文件中的目标字节序列。

解决所有这些问题的最佳方案是创建一个防止提升的清单,尽管重命名该文件可能就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

帮助理解为什么我们的应用程序在Win7上弹出UAC对话框 的相关文章

随机推荐

  • 如何更改通过 WindowManager 添加的窗口的 z 顺序?

    是否可以指定每个窗口的 z 顺序 在下图中 每个 editText 都位于通过 WindowManager 添加的自己的窗口中 正如你所看到的 我有一个 z 顺序问题 就像你在图片上看到的那样最后添加的窗口接缝采用更高的 z 顺序 因此 我
  • 在 Linux 上安装 PyQt5 5.14.1

    pip3 install PyQt5 Collecting PyQt5 Using cached https files pythonhosted org packages 3a fb eb51731f2dc7c22d8e1a63ba88f
  • 设置捆绑值返回 nil

    我向我的应用程序添加了一个 设置 包 在 Xcode 中 它出现在我的项目树视图的根目录中 The Root plist文件看起来像这样
  • 可以对 Julia 代码进行逐行分析吗?

    我有一些长达数百行的 Julia 函数 我想对其进行分析 以便我可以优化代码 我知道基准测试工具包允许使用以下命令测量函数的总体执行时间和内存消耗 btime or benchmark 但这些函数没有告诉我函数内部的瓶颈在哪里 因此 我的第
  • findall/3 在其结果列表中创建新的、不相关的变量

    permutation A B C Z Z A B C Z A C B Z B A C Z B C A Z C A B Z C B A false 说得通 我可以研究以下的排列 A B C 并且该排列包含与中相同的元素 A B C 所以我对
  • 如何禁止两个相互冲突的选项

    有没有办法向 Python 的 ArgumentParser 指定两个可选标志发生冲突 arg parser add argument c clean action store true arg parser add argument d
  • CallExpression 和 MemberExpression 之间的区别

    有什么不同 我看了ECMAScript规范 但不明白 真正的代码示例会有很大帮助 如果你能解释这里的每一行那就太好了 MemberExpression PrimaryExpression FunctionExpression MemberE
  • 检测有向图中循环的最佳算法[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 是否有一种有效的算法来检测有向图中的循环 我有一个有向图 表示需要执行的作业的时间表 作业是节点 依赖项是边 我需要检测该图中导致循环依赖的循环错误情况 Tarjan 的强连通分量算法 h
  • Pandas Dataframe / Numpy 数组“轴”定义中的歧义

    我对 python 轴的定义方式以及它们是否引用 DataFrame 的行或列感到非常困惑 考虑下面的代码 gt gt gt df pd DataFrame 1 1 1 1 2 2 2 2 3 3 3 3 columns col1 col2
  • JavaScript 中的 Console.log 输出

    Why do console log 00 and console log 01 在浏览器控制台中打印 0 和 1 而不是 00 和 01 console log 00 prints 0 console log 01 prints 1 co
  • Flex-box:将最后一行与网格对齐

    我有一个简单的弹性盒布局 其中包含如下容器 grid display flex flex flow row wrap justify content space between 现在我希望最后一行中的项目与另一行对齐 justify con
  • 如何将相同类型的多个参数传递给 jQuery Get

    我正在尝试使用 jQuery get 从网站获取一些数据 我需要设置2个相同类型的参数 q Some Text q Some other text jQuery 似乎用第二个实例覆盖 q 的第一个实例 并且仅发送 1 有什么办法解决这个问题
  • 适用于 iOS 的 WebDav 客户端库 [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有适用于 iOS 的 WebDav 客户端实现 看一下WTclient
  • 当只需要一个字节时,为什么 Rust 使用两个字节来表示这个枚举?

    它似乎足够聪明 只为 A 使用一个字节 但不够聪明 为 B 使用一个字节 即使只有 8 8 64 种可能性 有什么方法可以让 Rust 解决这个问题 还是我必须手动实现更紧凑的布局 游乐场链接 allow dead code enum A
  • Python 3:gzip.open() 和模式

    https docs python org 3 library gzip html 我正在考虑使用gzip open 我有点困惑mode争论 模式参数可以是 r rb a ab w wb x 中的任何一个 或 xb 表示二进制模式 或 rt
  • 检测 32 位或 64 位 Windows

    我想检测当前的Windows操作系统是32位还是64位 如何用C 实现呢 我不需要处理器类型 我想要操作系统的位类型 这是因为您可以在 64 位处理器上安装 32 位操作系统 要调用的函数是IsWow64Process or IsWow64
  • 无会话的 Passport js 身份验证

    我是expressjs和passportjs的初学者 我使用护照和 GoogleStrategy 通过谷歌进行身份验证 使用下面的代码我有req user id 123456 in 用户 你好路由处理程序 但我想得到一些类似的没有会话支持的
  • 如何使用 iCloud 访问 Xcode 项目

    我最近购买了一台 MacBook Pro 我将用它来开发 iPhone 应用程序 我希望能够在 Macbook 和 iMac 之间传输 Xcode 项目 就像使用 iCloud 传输 Word 文档一样 有没有一种安全的方法可以做到这一点
  • 递归关系[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何以最佳复杂度计算非常大的 n 例如 10 14 的 tribonacci 数 Tri
  • 帮助理解为什么我们的应用程序在Win7上弹出UAC对话框

    我们有一个 C 非托管应用程序 它似乎会导致 UAC 提示 似乎发生在Win7 而非 Vista 不幸的是 UAC dlg 是系统模式的 所以我无法附加调试器来检查代码所在的位置 并且在 msdev 下运行 我们使用的是 2008 以提升模