我最近遇到了这个问题。我在visual studio 2008中有一个简单的基于控制台的项目,我在发布模式下构建并发布它。
我们发现在干净的windows xp sp3机器中,双击时的可执行文件无法启动,并且会抛出一个错误,指出“配置不正确”。我们通过在系统上安装VS2008可重新分发的软件包来解决问题。我的问题是:
1-为什么会这样?它并没有发生在所有的xp机器上,而是其中一些。令人难以置信的是,默认情况下,windows xp sp3中不存在运行简单win32程序的文件。那么notepad.exe和其他程序在哪里运行呢?我考虑的一种可能性可能是操作系统中存在的运行时文件较旧,而exe清单指的是较新版本的文件。但我想知道是不是这样,因为VS 2008本身已经很老了。让我知道你的想法。
2-由于我必须在很多机器上运行exe,我正在考虑通过VS 2008中的win32程序静态链接所有需要的库。我知道链接器选项中的/ MT开关,但是想知道它是否会处理所有运行时库(C ++库和其他Windows库)。
感谢。
答案 0 :(得分:3)
之所以发生这种情况是因为VS2008可再发行组件未随Windows一起安装。它们必须由另一个应用程序安装,这意味着它们不会出现在原始Windows安装上。但是,由于许多Windows应用程序使用它们,因此它们可能会出现在安装了少量应用程序的计算机上。原生Windows应用程序(如记事本)不依赖于它们,因此没有它们的记事本运行就不足为奇了。
正如typ1232已经指出的那样,/ MT选项将解决您的问题(代价是增加您的EXE和DLL大小)。本机Windows API的库保证存在,除非它们被特别记录为必须单独安装的选项,因此您无需担心它们。
使用基于原始Windows安装的发布模式测试应用程序是测试任何Windows应用程序的关键步骤,正如您现在所发现的那样。
答案 1 :(得分:2)
/ MT选项将导致运行时库静态链接,因此动态库不必存在于目标系统上。
另一种方法是使用安装程序打包redist安装程序。