什么VS2010 C项目设置导致exes需要兼容模式

Mci*_*one 6 c++ compatibility projects visual-studio-2010

我已经在我的Windows 7 64位机器上运行并编译了几个月的程序,但最近我不得不更改它使用的静态库的几个VC项目设置,现在生成的可执行文件需要我运行它在"Windows XP兼容模式"中.

  • 使用Visual Studio 2010 SP1在Windows7 64位计算机上编译
  • 我生成的程序是在Win32,调试模式下构建的.
  • 静态lib项目指定Target Machine/X86.
  • 当我从调试器运行程序时,它启动并运行,但是如果通过Windows图标运行,则需要XP兼容模式.
    • 当尝试在调试器外部启动时,EXE会在任务管理器中显示一秒钟然后消失.
  • 我已尝试在其上使用Microsoft Application Verifier,但我不知道在输出中要查找什么.

我一直无法找到有关如何解决此问题的任何细节,所以如果有人有任何方法找到可能导致这个最近的兼容模式要求的东西,我很想听听它是如何修复的.

我有链接的大多数静态库的源/项目/解决方案,以及生成的exe文件,但是一些外部依赖项我只有.lib,.dll和.h文件.这意味着如果需要,我可以更改(大多数)依赖项的项目设置,但我需要知道要查找哪些.

谢谢

Cel*_*ess 1

说实话,不要害怕创建另一个项目并复制代码文件,即使是 5 个项目。你需要将问题减半。如果它适用于新项目,那么它是项目文件,如果不是,它是代码。制作项目实际上并不那么难,尽管我确信这会引起人们的恐慌和人们的回避。如果是项目,您可以比较文件并通过消除过程查看发生了什么。如果你真的担心,请将整个解决方案复制到另一个文件夹;始终做好备份。

问题是,除非运气好,否则您可能无法向我们提供足够的信息来获得有意义的答案,而且所有答案都将是无稽之谈。

所以我会把这个问题当作“发生这种情况,我能做些什么”。如果以前有效的话,上面的策略会让你摆脱困境。这项练习将为你的未来做好准备,从长远来看会更加富有成效。如果您需要查看一件事,请查看 UAC 和清单文件,即 Vista+ 差异,它们会显着改变加载和运行行为(链接器命令Vista 迁移指南),但请尝试上述过程。

----

其他可以尝试的通用方法:

1)另一台机器

2)再次安装VS

3)一个只有一个窗口的简单项目,无法证明工具链和环境中的其他一切都正常。

4)沿着代码路径放置带有不同消息的消息框,这样你就知道它在哪里出现了。

5) 在发布版本中打开 pdb,并在调试器之外运行。如果出现问题,请尝试调试并查看是否仍然出现问题,但您可以看到在哪里。

6)假设你的代码不稳定,并且当它曾经工作时你很幸运。(这个一点也不好玩)。很多时候,由于内存布局不同,调试时可以正常工作,而发布时则无法正常工作。如果您的程序很大,您可以找到创造性的方法来使用 #if 等来限制代码运行,同时让整个程序仍然加载。您可以找到导致不良行为的代码。

7)关闭UAC和错误报告(如果打开),看看是否有变化。

8)在Visual Studio中找到“运行而不调试”菜单按钮,这样你就不必使用图标来运行它。这是一场即将发生的事故,并且消除了又一个环境差异。它看起来像运行调试按钮,但它是空心的,一个纯绿色的三角形。它位于调试菜单设置下。我的观点是,默认情况下不在栏上添加它弊大于利,因为它让很多人感到困惑,认为使用 VS 启动意味着始终使用调试器。

等等....