最近公司软件windows客户端在安装的时候遇到直接闪退的问题。最后查出来是vc运行时库版本比我们的低。为了指定特定版本的vc运行时库就像到了manifest文件。


Manifest

Manifests are XML files that accompany and describe side-by-side assemblies or isolated applications. —— [ MSDN ]

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--This Id value indicates the application supports Windows Vista functionality --><supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!--This Id value indicates the application supports Windows 7 functionality--><supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!--This Id value indicates the application supports Windows 8 functionality--><supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!--This Id value indicates the application supports Windows 8.1 functionality--><supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/></application> </compatibility><assemblyIdentity type="win32" name="myOrganization.myDivision.mySampleApp" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/><dependency><dependentAssembly><assemblyIdentity type="win32" name="Proseware.Research.SampleAssembly" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="0000000000000000" language="*"/></dependentAssembly></dependency>
</assembly>

这里根据MSDN的说明了解到manifest文件其实就是一个xml文件,用来指定应用程序(包括DLL)需要的动态库版本还有需要的系统权限等。


了解到了这些就直接开干吧。

使用的是VS2013 右键项目属性可以看到生成清单是默认的,可以用notepad打开应用程序,然后拉到最后就会看到一个内嵌manifest文件内容

这里我们可以直接看到附加清单依赖项。按照我们上面看到的manifest文件的示例,加上如下一段代码。这里我是想指定应用程序加载制定版本12.0.21005.1版本的运行时库。

<dependency><dependentAssembly><assemblyIdentity
            type="win32"name="Microsoft.VC120.CRT"version="12.0.21005.1"processorArchitecture="x86"/></dependentAssembly>
</dependency>

做完上述的步骤之后,在虚拟机上模拟客户机器的状态。安装了低版本的vc120的运行时库,版本12.0.20617.1。

由于我们安装包里面是自带有12.0.21005.1版本的运行时库的,在安装时崩溃还是出现了,用process explorer看安装程序,在运行过程中还是调用了vc120 的12.0.20617.1运行时库。所以这里指定版本的manifest文件没有管用。那么继续google类似问题。找到了一篇博文http://mariusbancila.ro/blog/2010/03/24/visual-studio-2010-changes-for-vc-part-5/ ,在文章中得知也就是只是在vs2005和vs2008版本的运行时库会在系统 windows/WinSxS文件夹中创建相应版本运行时库的文件夹。而后续版本的运行时库不会使用这个文件夹来部署运行时库。所以这条路暂时是没有希望了。

那么换一个思路,动态库加载时候搜索路径的顺序
由于安装包是用nsis脚本开发,在oninit回调函数中调用了我们的dll的一个函数,这时调用了vc120的运行时库。版本是12.0.20617.1。死结。由于运行时库已经加载进内存。系统不会再搜索其他版本的运行时库。所以只有在调用我们dll一个函数之前,先设置环境变量,调用SetEnvironmentVariable函数。

问题暂时先这么解决了。还有一个问题是明明我们开发的dll用的静态链编但是还是加载动态库。唉

windows客户端安装时运行时库版本不匹配的问题相关推荐

  1. 在Windows上安装两个不同版本的数据库

    ** 在Windows上安装两个不同版本的数据库 ** 我在学校期间,自己安装的8.0版本,老师有可能会让我们用一些版本比较低的数据库,比如说你装的8.0的,突然这个要用到5.7的,又不想删除原有的数 ...

  2. windows客户端安装

    windows客户端安装 1.  从zabbix2.0.5的安装文件里解压bin目录,里面有win32和win64两个目录,分别对应32位和 64位 的windows操作系统,我这里使用的是32位的系 ...

  3. Windows下安装Boot Camp提示版本不适用

    Windows下安装Boot Camp提示版本不适用 在苹果官网下载boot camp,Windows下解压点击setup安装,提示版本不适用. 那就到解压后的文件BootCamp\Drivers\A ...

  4. Windows 10 安装 1080 ti GPU版本TensorFlow 踩坑记录

    本文主要是参考https://www.leiphone.com/news/201711/GCh0IBszXrxP1iHU.html 并在其基础上细化说明,以及排雷. 因此建议先看上述博文,然后看完本文 ...

  5. 【windows】安装pytorch1.7.1-cpu版本的geometric过程记录

    首先在https://pytorch-geometric.com/whl/,查看对应版本的whl文件,这里进入torch-1.7.1+cpu,因为我们使用的是python3.6版本,所以选择的是cp3 ...

  6. 在获取ADID时遇到疑似库版本不匹配的问题

    三年没碰过安卓开发了,最近要做个小调研,在获取ADID的时候遇到了一些麻烦,想麻烦高手帮忙看看 用AndroidStudio,已经将别人发给我的google-play-services.jar放入li ...

  7. 安装nagios+监控Linux客户端服务端+监控windows客户端

    1.解决依赖包 yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-devel mysq ...

  8. Linux 下 Open××× 安装和 Windows Open××× GUI 安装笔记

    一. Open××× 安装环境 Server 端的环境 [root@localhost etc]# lsb_release -a LSB Version:    :core-4.0-amd64:cor ...

  9. Windows 10 安装使用TensorFlow-GPU

    Windows 10 安装使用TensorFlow-GPU 当前环境描述:Win10 64位,Python3.6 目标:安装使用TensorFlow1.6-GPU 所需文件:Cuda9.0.Cudnn ...

最新文章

  1. Android10.0 Binder通信原理(九)-AIDL Binder示例
  2. 什么是 SAP Fiori Tools
  3. 【css】适配iphoneX
  4. 人类(行为)动力学(1)——初步了解
  5. 微软surface屏幕测试软件,Soomal作品 - Microsoft 微软 Surface Book 笔记本电脑屏幕测评报告和色彩校正 [Soomal]...
  6. 无法打开包括文件: “ui_XXX.h”: No such file or directory
  7. 用python处理excel视频教程_从零基础开始用Python处理Excel数据(第一季)课件+资料...
  8. 利用PPT表格对图片进行矩形分割
  9. ospf的五类LSA
  10. 浅谈对统计机器学习的认识
  11. matlab消除多重共线性,多重共线性问题的几种解决方法-解决多重共线性的方法...
  12. TextView 设置显示省略号
  13. PyCharm 和 VScode 我更适合用哪个?
  14. 第2章 HashMap集合
  15. 每日一题吧算是,见证自己的成长路程_(:з」∠)_
  16. 知识产权贯标认证的好处,如何申请?
  17. Windows平台七牛批量上传工具使用教程
  18. android手机刷win10吗,有哪些手机可以刷win10系统?Android机上将可刷Win10?
  19. Ajax 技术汇总(转载)
  20. html5details标签。

热门文章

  1. 喜大普奔——Mapbox GL JS支持多种投影了
  2. 人工鱼群算法超详细解析附带JAVA代码
  3. Axure rp8.1.0.3382激活码(亲测可用)
  4. Web前端开发技术实验与实践(第3版)储久良编著实训12
  5. 《朱元璋为何隐瞒自己的民族成份》
  6. 四甲基环四硅氧烷D4H
  7. 机器学习——RBF神经网络
  8. C语言 将若干个字符串按字母顺序由小到大输出
  9. Java 面试题:数据结构 + 算法 +JVM+ 线程 +finalize+GC
  10. 【STM32CubeMx】学习记录(基于微雪教程)(2019/2/16——2019/2/23完结)