【问题标题】:How to programmatically disable Program Compatibility Assistant in Windows 7 and Vista for a native C++ application?如何以编程方式在 Windows 7 和 Vista 中为原生 C++ 应用程序禁用程序兼容性助手?
【发布时间】:2026-02-24 09:50:01
【问题描述】:

我有一个使用 C++/ATL 构建的自定义安装程序应用程序。该应用程序的目标平台是XP3,VS解决方案由静态库和exe项目组成。应用程序始终以提升权限启动,即以管理员身份启动

当我从 Visual Studio 运行它(VS 本身以管理员身份启动)时,一切都很好,PCA 永远不会显示。当我从 Explorer 在同一台机器上运行它时,PCA 也永远不会显示。

但是,当我在新的 Windows 7 机器上运行它时,无论我是从提升的资源管理器还是非提升的资源管理器启动它,都会始终显示 PCA。

项目属性中与清单相关的部分设置如下:http://screencast.com/t/70GOcbf243

为了摆脱第二台机器上的 PCA,我该怎么做? 谢谢!

【问题讨论】:

标签: visual-c++ compatibility


【解决方案1】:

我认为您应该重命名您的应用程序。有一些硬编码的名称会强制 PCA...例如:

  • 产品名称包含“instal”或“setup”或“update
  • 公司名称包含“instal”或“setup”或“update
  • Internalname 包含“instal”且应用未命名为“TrustedInstaller.exe”
  • 原始文件名包含“instal”且应用未命名为“TrustedInstaller.exe”
  • 文件描述包含“instal”且应用未命名为“TrustedInstaller.exe”
  • 文件名包含“instal”且未命名为“TrustedInstaller.exe”
  • 导出名称包含“setup.exe”或“install.exe”或“stub32”或“stub32.exe”或“signstub.exe”
  • 文件名包含“patch”或“setup”或“uninst”或“update”或“ lhaca*.exe”
  • 文件描述包含“instal”或“setup”或“update”或“uninst”李>
  • 原始文件名包含“setup”或“update
  • 原始文件名包含“setup”或“update

另请参阅:Custom installer without warning dialog… (TrustedInstaller.exe)

作为替代方案,您可以在应用程序清单中添加操作系统兼容性部分以防止 PCA。将以下内容添加到您的应用程序清单中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      <!--The ID below indicates application support for Windows Vista --> 
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
      <!--The ID below indicates application support for Windows 7 --> 
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    </application> 
  </compatibility>
</assembly>

有关详细信息,另请参阅Application Manifest

【讨论】:

  • 就是这样,我的安装程序在 originalfilename 中包含“instal”,因此一旦更改,PCA 将不再显示。但是,作为包的一部分,我有第三个应用程序,它也到处都有“安装”:在名称、原始名称等中,但 PCA 既没有出现在 dev 也没有出现在新机器上......
  • 您还应该添加一个 VIsta/Win7 清单:blogs.msdn.com/b/cjacks/archive/2009/03/27/…