今天,我这里处理了一个WinSxS版本混乱导致的应用程序无法加载的问题。
环境如下:
- 有一个EXE文件,不依赖任何的运行库
- 有很多DLL文件,分别在EXE文件目录的子目录下
- EXE文件所在目录下有一套安装的VC8运行库
- DLL文件需要依赖VC8运行库
- 因为各种原因,没有使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面
使用的时候发现,EXE文件加载DLL的时候,总是提示加载失败。DLL无法启动。我用 Process Monitor 监视了一下文件的读写操作,发现EXE文件在加载DLL的时候,CSRSS总是去读取 Windows\WinSxS 目录下的运行库文件,由于没有使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面,因此DLL加载失败了。
我很奇怪的问题是,为什么总是忽略了EXE目录下的manifest文件,而总是使用 Windows\WinSxS 目录下的文件呢?
以前知道manifest文件可以外置,也可以内置到PE文件的资源里面,难道是内置的问题吗?用Resource Hacker打开DLL文件,果然发现了内置的清单文件。把这个资源结点删除以后,保存退出,然后再使用EXE文件加载这个DLL文件,OK~问题解决 了。这次使用的是EXE目录下的运行库文件而没有使用Windows\WinSxS目录下的文件了。
BTW:对于开发人员来说,自然不能编译以后再手工删除这个资源结点,解决方法很简单,把工程的 manifest设置里面的 embedded manifest 功能关闭掉,这样编译以后就会出现编译生成的目标文件和一个额外的manifest文件。使用的时候,系统会首先尝试到Windows\WinSxS目录 下面寻找文件,如果文件不存在,那么会在EXE文件所在目录下寻找,而不是去DLL所在目录下寻找文件。
问题解决以后,就需要想想问什么只有在部分系统上面出现这个问题了,检查发现:没有问题的系统都使用vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面了,有问题的系统,发现WinSxS目录下没有运行库文件,自然不能使用了。
目前,很多软件都使用了VC8开发,而且都使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面,但是有某些软件在卸载的时候,又把这个运行库卸载了,结果就会导致类似提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”的错误的出现。这是最常见的一种现象。另外还有下面的几种可能会导致WinSxS混乱:
- manifest文件被破坏
- 复制了错误的manifest文件到错误的目录,导致manifest文件里面记录的内容和实际的DLL版本不符
最后,如果你碰到提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”,最佳的操作方法是看看这个文件依赖的运行库是否齐备,如果不会看,最简单的办法就是重新安装所有的运行库版本到系统里面。
下面是所有常见的32位运行库版本的下载地址:
- 适用于 Visual C++ 2005 开发的程序的运行库版本:http://www.microsoft.com/downloads /details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&displaylang=zh-cn
- 适用于 Visual C++ 2005 SP1 开发的程序的运行库版本:http://www.microsoft.com/downloads /details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=zh-cn
- 适用于 Visual C++ 2008 开发的程序的运行库版本:http://www.microsoft.com/downloads /details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=zh-cn
- 适用于 Visual C++ 2008 SP1 开发的运行库版本:http://www.microsoft.com/downloads /details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=zh-cn
如果你不知道你使用的程序是什么版本开发的,那么就全部安装吧,嘿嘿~
BTW:WinSxS 技术从 Windows XP 开始引入,一直发扬到 Windows Vista 系统里面,表现形式就是随着系统使用时间的增加,Windows\WinSxS 目录会越来越大,这一点在 Windows Vista 系统里面会特别突出,因为 Windows Vista 系统的系统文件都是使用 WinSxS 目录存放的,Windows\System32 目录下看到的大部分文件实际上是 WinSxS 目录下文件的一个 Hard Link 而已 :)
分享到:
相关推荐
综上所述,这篇博文可能是一篇关于优化Windows 7性能的技术教程,指导用户如何通过移动winsxs文件夹来释放C盘空间,提升系统运行速度。然而,这种操作并不适合所有用户,因为它需要一定的技术知识和对潜在风险的认识...
2. **压缩旧版本组件**:通过硬链接技术,将不再需要的旧组件进行压缩,减少磁盘占用。 3. **合并文件**:通过整合重复的或相似的文件,减少WinSxS的大小。 4. **优化更新过程**:清理工具可能优化了更新机制,...
### 在Windows 8及Windows 8.1中的WinSxS文件夹清理 #### WinSxS文件夹概述 在Windows 8以及Windows 8.1操作系统中,WinSxS(Windows Side by Side)文件夹扮演着重要的角色。这个文件夹主要负责存储系统的组件...
《DccwBypassUAC:Windows 8.1与10 UAC绕过技术解析——基于"dccw.exe"的WinSxS利用》 在网络安全领域,了解并掌握系统漏洞利用技术至关重要,尤其是针对操作系统核心组件的利用。本文将深入探讨一个名为...
因此,第三方工具虽然能提供一定的帮助,但也需要用户有一定的技术知识,以理解其可能带来的风险。 在使用名为"WinSxS工具"的压缩包文件之前,首先需要确保你的计算机满足以下条件: 1. 已安装Windows 7系统,并且...
随着计算机技术的不断发展,软件安装与卸载过程中的残留文件、系统运行产生的临时文件、以及用户自身操作产生的无用数据,日积月累,会导致系统文件的紊乱和性能的下降。为了维护计算机的健康和运行效率,定期清理...
页面文件(`pagefile.sys`)是Windows XP用于虚拟内存的技术。默认情况下,它的大小设置得相对较大,从而浪费了不少硬盘空间。可以通过以下步骤来调整页面文件的大小: - 打开“控制面板”→“系统”→“高级”选项卡...
总的来说,Windows 7中的硬链接机制是微软为了提高系统稳定性和兼容性而设计的一项技术,它在WinSxS文件夹的运作中扮演了关键角色。通过了解这一机制,用户可以更好地理解Windows操作系统的工作原理,并在必要时进行...
### 电脑黑屏但鼠标能动的解决方案 在日常使用电脑的过程中,我们偶尔会遇到一些让人头疼的问题,比如“电脑黑屏但鼠标能动”的情况。这种情况虽然不如完全无法开机...如果问题仍然存在,建议寻求专业技术人员的帮助。
标题中的"C盘巨大的文件是什么文件.docx"是一个文档,它提到了用户在C盘发现的三个大文件,分别是`Winsxs`文件夹、`FaceProv.log`日志文件和`Pagefile....如果遇到问题或不确定如何操作,建议寻求专业技术人员的帮助。
总的来说,Windows 7的winsxs文件夹利用硬链接技术,解决了系统文件管理和空间优化的问题,虽然它在直观上显得体积庞大,但实际上是通过高效的数据共享减少了磁盘空间的占用。了解这一机制有助于我们更好地理解和...
近期,多台安装了Windows XP操作系统的电脑遭遇了一种特殊的技术问题——开机后屏幕全黑,仅鼠标指针可移动,键盘输入无响应。这种现象被广泛称为“Windows XP黑屏事件”。根据用户的反馈与初步调查,此问题似乎与...
这为技术爱好者和开发者提供了学习和定制的机会,他们可以深入理解清理过程,甚至根据自己的需求进行定制。 标签 "工具" 证实了这是一个实用程序,设计用来执行特定任务,即清理Windows系统的冗余数据。 在文件...
随着计算机技术的发展与应用的多样化,操作系统对于硬件资源的需求也在不断增加。Windows 7作为一款较为成熟的操作系统,在一定程度上优化了内存管理机制,但仍然有不少用户遇到内存占用过高或者系统运行缓慢的问题...
Win7系统设置工具是一款针对win7系统的设置工具,可以让用户轻松设置新装系统并... 4、Win7系统设置工具减肥功能会同时删除Winsxs下的文件(包括windows功能删除),达到完美减肥效果。 5、此工具适合封装技术员进行系
在IT领域,尤其是在Windows平台上的软件开发中,Visual C++ 2008(简称VC++2008)是一个广泛使用的编译器,用于创建C++应用程序。...对于开发者来说,掌握这种技术能够提高程序的可移植性和用户的使用体验。
虚拟内存是指计算机使用硬盘空间来充当内存的技术。虚拟内存的存在形式是 PAGEFILE.SYS 文件。虚拟内存只是物理内存不足的补充,因此不要过分依赖虚拟内存。高频率的读写操作对硬盘损伤很大,也容易出现硬盘坏道。 ...
在Windows 7操作系统中,有时用户在尝试安装驱动程序时可能会遇到“找不到指定模块”或“XXX.dll文件丢失”的错误...然而,对于更复杂的情况,可能需要更新操作系统、安装最新的驱动程序更新,或者寻求专业的技术支持。
- 虚拟内存是当物理内存不足时,操作系统利用硬盘空间模拟内存的一种技术。页面文件pagefile.sys就是虚拟内存的实体。 - 虚拟内存的读写速度远低于物理内存,频繁使用可能会导致硬盘损坏和性能下降。 - 设置虚拟...