如何以编程方式禁用Windows 7和Vista中的程序兼容性助手以获取本机C ++应用程序?

时间:2013-07-15 17:39:33

标签: visual-c++ compatibility

我有一个使用C ++ / ATL构建的自定义安装程序。应用程序的目标平台是XP3,VS解决方案由静态lib和exe项目组成。应用程序总是被提升,即作为管理员

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

然而,当我在一台全新的Windows 7机器上运行时,无论是从高架资源管理器还是非高架资源管理器启动它,都会显示PCA。

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

如何在第二台机器上摆脱PCA? 谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你应该重命名你的申请。有一些硬编码的名字迫使PCA ......如:

  • Productname包含“ instal ”或“ setup ”或“ update
  • 公司名称包含“ instal ”或“ setup ”或“ update
  • Internalname包含“ instal ”,app未命名为“TrustedInstaller.exe”
  • Originalfilename包含“ instal ”,app未命名为“TrustedInstaller.exe”
  • Filedescription包含“ instal ”,而app未命名为“TrustedInstaller.exe”
  • 文件名包含“ instal ”,未命名为“TrustedInstaller.exe”
  • Exportname包含“setup.exe”或“install.exe”或“stub32”或“stub32.exe”或“signstub.exe”
  • 文件名包含“修补程序”或“安装程序”或“ uninst ”或“更新”或“ lhaca * .EXE”
  • Filedescription包含“ instal ”或“ setup ”或“ update ”或“ uninst
  • Originalfilename包含“ setup ”或“ update
  • Originalfilename包含“ 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