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

时间:2011-02-23 23:41:10

标签: windows-7 uac compatibility

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

Program Compatibility Assistant image http://i.msdn.microsoft.com/dynimg/IC5958.gif

编辑:Program Compatibility Assistant: frequently asked questions

我意识到S.O已经提出了这个问题。

然而,我的应用:

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

    注意#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>
    

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

    要明确的是,我要问一个2部分的问题:

    1. 哪些问题可能导致PCA对话框出现?
    2. 为了避免PCA对话,<compatibility>节点是否绝对必要?或者我可能还在做错事吗?

1 个答案:

答案 0 :(得分:9)

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