6

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

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

我一直无法找到有关如何解决此问题的任何详细信息,因此,如果有人有任何方法找到可能导致此最近的兼容模式要求的原因,我很想听听它是如何解决的。

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

谢谢

4

1 回答 1

1

老实说,即使是5个项目,也不要害怕制作另一个项目并复制代码文件。你需要把问题减半。如果它适用于新项目,那么它是项目文件,如果不是,它是代码。制作项目真的没有那么难,尽管我确信这会引起很多恐慌和人们避免的事情。如果是项目,您可以比较文件并查看消除过程中发生的情况。如果您真的担心,请将整个解决方案复制到另一个文件夹;总是做备份。

问题是,除非运气好,否则您可能无法向我们提供足够的信息来获得有意义的答案,而所有答案都将是在黑暗中拍摄的。

所以我打算把这个问题当作“发生这种情况,我能做些什么”。上面的策略会让你摆脱它,如果这曾经奏效的话。这项练习将武装你的未来,从长远来看会更有成效。如果您需要查看一件事,请查看 UAC 和清单文件,也就是 Vista+ 的不同之处会极大地改变加载和运行行为(链接器命令Vista 迁移指南),但请尝试上述过程。

----

其他通用的尝试:

1)另一台机器

2)另一个安装VS

3) 一个带有一个窗口的简单项目,它无法证明您的工具链和环境中的所有其他内容都可以。

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

5)在调试器之外发布和运行pdb。如果出现问题,请尝试调试并查看是否仍然出现问题,但您会看到在哪里。

6)假设您的代码不稳定,并且您在过去可以工作时很幸运。(这个不好玩)。由于内存布局不同,很多时候事情在调试中而不是在发布中起作用。如果您的程序很大,您可以找到创造性的方法来使用#if 的任何内容来限制代码运行,同时让整个事情仍然加载。您可以找到导致不良行为的代码。

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

8)在Visual Studio中找到“运行而不调试”菜单按钮,所以你不必带着图标去运行它。这是一场等待发生的事故,并消除了另一个环境差异。它看起来像带有调试按钮的运行,但它是空心的,是一个纯绿色的三角形。它在调试菜单集下。我的意见是,默认情况下没有在栏上显示它弊大于利,因为它使许多人感到困惑,认为使用 VS 启动意味着始终使用调试器。

等等....

于 2012-09-06T20:17:37.420 回答