获取Program Compatibility Assistant对话框的原因是什么?

Joh*_*hnB 21 compatibility uac windows-7

应用程序关闭后获取Program Compatibility Assistant对话框的可能原因是什么?

程序兼容性助手图像http://i.msdn.microsoft.com/dynimg/IC5958.gif

编辑:程序兼容性助手:常见问题解答

我意识到这个问题已经被提出来了

但是,我的应用程序:

  1. 关闭后才能获得PCA
  2. 不试图做任何需要提升权限的事情(我不认为)
  3. 从IDE运行时不会获得PCA
  4. 不是安装程序/安装程序
  5. 程序名称中没有"installer"或"setup"
  6. 关闭时不抛出异常,或者使用0以外的代码退出(我不认为)
  7. 如果我将节点添加到应用程序清单,则不会获得PCA<compatibility>

注意#6,有以下app.manifest,我不再获得PCA:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <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>
</asmv1:assembly>
Run Code Online (Sandbox Code Playgroud)

所以第二部分似乎解决了它,但我担心我的应用程序仍在做一些我不知道的事情.

为了清楚起见,我问了两个问题:

  1. 哪些问题可能导致PCA对话框出现?
  2. <compatibility>节点是否绝对必要,以避免PCA对话?或者我可能仍然做错了什么?

And*_*own 9

这篇MSDN文章描述了可能导致程序兼容性助手启动的许多条件.我将查看它描述的一组方案,并查看它们是否适用于您的程序.我确实看到了您排除的条件之外的PCA对话的原因(例如,尝试在其下创建新文件夹%ProgramFiles%).