当前位置: 首页 > article >正文

VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

文章目录

    • VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
    • 概述
    • 笔记
      • VS2008安装环境
      • VS2008测试程序设置
      • 默认报错的情况
      • 措施1
      • 措施2
      • 备注 - exe清单文件的问题
      • 是否使用静态库?
      • _BIND_TO_CURRENT_VCLIBS_VERSION的出处?
      • 将VS2008生成的程序在winxpSp3上运行的几种方法的比较
      • 备注
      • 备注 - 如果不是刚需,可以用VS2013
    • END

VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

概述

装完VS2008, 写个测试程序,试试是否可以正常在winxpSp3上用。
只将exe拷贝过去,报错如下:

---------------------------
C:\Documents and Settings\lostspeed\桌面\test\test_winxp_vs2008.exe

由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

---------------------------
确定   
---------------------------

采取了2个措施,报错消失,可以正常运行。

笔记

VS2008安装环境

win10x64, 安装顺序如下,只安装vc++.
在这里插入图片描述

VS2008测试程序设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完全编译

默认报错的情况

在这里插入图片描述

措施1

在顶层头文件中加入宏 _BIND_TO_CURRENT_VCLIBS_VERSION
在这里插入图片描述
WINVER版本虽然不是0x0501, 先不管他。
将exe拷贝到winxpSp3中运行。
在这里插入图片描述
看到报错信息还是一样,并没有说缺啥DLL.

措施2

拷贝exe依赖的VS2008的DLL, 针对这个测试程序,就只拷贝DEBUG版的DLL, 具体可以用depend去看。
这个默认的测试程序,没有使用MFC/ATL, 且是debug/win32, 那么只拷贝VS2008 debug/x86的DLL到winxpSp3就行。

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT

在这里插入图片描述
将这4个东西(DLL和清单文件),都拷贝到winxpSp3中。
在这里插入图片描述
可以看到,这回就正常了。

备注 - exe清单文件的问题

默认的清单文件嵌入在exe内部。
在这里插入图片描述

是否使用静态库?

如果没有特殊需求,当然不能采用静态库。
因为程序大了之后,不可避免的会用第三方库,人家大多数都会使用动态库。
如果将整个程序都改为静态库包含,不现实。

_BIND_TO_CURRENT_VCLIBS_VERSION的出处?

_BIND_TO_CURRENT_VCLIBS_VERSION 并没有MS官方文档说明,不知道是哪个大神第一次采用这种方法,第一个用这个宏的一定是MS内部的人,要不谁知道有这东西?

仅在VS2008的头文件crtassem.h中可以看到这个宏大概干了啥。
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtassem.h

在这里插入图片描述
能大致知道,VS2008有2个版本的DLL, 一个是VS2008原版用的,一个是VS2008SP1打补丁之后的版本。
那么大致知道,在工程中是否定义这个宏,就指定了使用哪个版本的DLL.
也许是使用了这个宏,对DLL版本的要求就不那么严。

将VS2008生成的程序在winxpSp3上运行的几种方法的比较

在这里插入图片描述
首先排除使用静态链接,各种弊端。
如果是让debug版程序到winxpSp3上运行,就定义宏。
如果是release程序到winxpSp3上运行,就安装VS2008发行包,再运行我们自己的程序就正常。

备注

这个问题,也在网上查了一下,好多同学都是各种原因,各种解释,看的脑袋疼。
自己试验后,发现就多做这2步,就清净了。
可能因为VS2008出的比较早,报错信息也就不那么明确,这个报错看的人一愣一愣的。

备注 - 如果不是刚需,可以用VS2013

可能是因为VS2008出的比较早,非要在工程中定义宏来让DLL版本依赖宽松一些。
VS2013做的比较好(没有UCRT补丁依赖,原生支持winxpsp3),工程不用定义宏,只要工具链采用xp链,编译完,将DLL拷贝全后,在winxpsp3中直接正常用。

END


http://www.kler.cn/a/525713.html

相关文章:

  • DeepSeek模型:开启人工智能的新篇章
  • Golang笔记——常用库context和runtime
  • Ubuntu全面卸载mysql
  • Node.js 的底层原理
  • AI编译器之——为什么大模型需要Relax?
  • 研发的立足之本到底是啥?
  • 你的连接不是专用连接
  • 信息学奥赛一本通 1606:【 例 1】任务安排 1 | 洛谷 P2365 任务安排
  • Web-3.0(Solidity)基础教程
  • 【PySide6拓展】QWindowCapture
  • AI在自动化测试中的伦理挑战
  • 【Unity3D】实现横版2D游戏——单向平台(简易版)
  • 31【api接口】
  • 构建具身智能体的时空宇宙!GRUtopia:畅想城市规模下通用机器人的生活图景
  • Effective Objective-C 2.0 读书笔记——关联对象
  • Node.js MySQL:深度解析与最佳实践
  • 程序代码篇---Python随机数
  • 【Java】微服务找不到问题记录can not find user-service
  • 每日一题——序列化二叉树
  • Python3 【集合】水平考试:精选试题和答案
  • 【redis进阶】redis 总结
  • 青少年编程与数学 02-008 Pyhon语言编程基础 07课题、数字
  • deepseek R1 14b硬件要求
  • Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)
  • SpringBoot 基础特性
  • 精灵图的知识