【问题标题】:How can I disable the Program Compatibility Assistant for my program in C++/Win32?如何在 C++/Win32 中为我的程序禁用程序兼容性助手?
【发布时间】:2011-06-14 15:50:13
【问题描述】:

当我的应用程序退出时,会出现 Windows“程序兼容性助手”。我不想在我的应用程序终止时出现该窗口。


这是我的问题http://msdn.microsoft.com/en-us/library/dd371711(v=vs.85).aspx的解决方案 我添加了自定义清单。

【问题讨论】:

  • 你是如何退出你的程序的?
  • Windows 使用启发式方法来确定为旧版本 Windows 编写的应用程序是否可能尝试执行不再受支持的操作。这在安装人员中尤其常见。如果不了解您的程序,就很难进行调试。
  • 我以 return 0 结束申请;

标签: c++ winapi compatibility


【解决方案1】:

如果您看到此对话框,则可能发生以下两种情况之一:

  1. 您的程序被检测为安装程序,Windows 正在为您升级安装程序。您对此几乎无能为力,因为此海拔检查是由文件名启发式确定的。如果您的程序的文件名中包含“setup”、“instal”(是的,一个 l)或其他一些文件名,则会出现对话框,您对此无能为力。
    编辑:显然有办法解决这个问题……见 cmets。

  2. 或者,您可能正在调用某些在当前版本的 Windows 中已弃用的 API,或者错误地调用了某些 API,从而触发了兼容性试探法。如果是这种情况,您只需在程序中找到触发启发式的位置。您可以使用Application Compatibility Toolkit (ACT) 来确定触发对话框的原因,IIRC。

没有办法只是“禁用”这个对话框——你必须首先修复触发它的原因才能让它消失。

【讨论】:

  • 如果它是#1,那么如果你的清单中有一个 requestedExecutionLevel 标签,你就可以了。仅当没有清单或清单未指定 requestedExecutionLevel 时才应用启发式。
  • @Adrian:您愿意将这样做的步骤放入答案中吗?
  • 关于如何将 requestedExecutionLevel 添加到应用程序清单的说明:msdn.microsoft.com/en-us/library/bb756929.aspx
  • @Adrian:我要求您将其放入答案中的主要原因是我们可以投票赞成 :)
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 2010-12-07
  • 1970-01-01
  • 2010-10-22
  • 2011-07-03
  • 1970-01-01
  • 2012-07-25
  • 2010-12-07
相关资源
最近更新 更多