Winsxs文件夹中的文件夹名称的含义是什么(Windows运行时程序集目录)

背景:

  • Windows共享运行时库位于C:\windows\Winsxs文件夹
  • 在Winsxs内部,还有两个重要的子文件夹也被定位为policiesManifests
  • 除此之外,还有大量运行时程序集位于彼此的子文件夹中。
  • Winsxs所有子文件夹和具有相同命名格式的policies

例如文件夹名称:

  • 运行时间: x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e
  • 策略: x86_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75

正如我所知,名称的第一部分(x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1)描述了“processorArchitecture”( x86 ),“Name”( Microsoft.VC90.CRT ),“publicKeyToken”( 1fc8b3b9a1e18e3b )和“Version” 9.0.30729.1 )的议会或政策。

问题:程序集( x-ww_6f74963e )或策略( x-ww_b7353f75 )文件夹名称描述的最后部分是什么?


好的,这是最初的问题(但相当长的故事)。 我在Windows XP计算机中部署了我的C ++ MFC应用程序,该应用程序以前安装了一些C ++重新分发包和一些运行时程序集的安全修补程序。 因此,这些预先安装的C ++重新分发包会自动在Winsxs/policies部署一些运行时Winsxs/policies 。 这些策略强制使用新的运行时程序集,而不是由我的应用程序使用和部署。 但有些时候,这些较新的DLL不在那里,因为一些其他的应用程序删除或程序集可能会损坏。 所以我find一种方法来部署特别用于我的应用程序的运行时程序集(这意味着我的应用程序必须使用曾经部署的程序并忽略策略)。 所以我认为子目录名的最后部分与应用程序的身份相关联。 我需要find它。

如果你不能信任全局缓存(在WinXP上它很容易破坏它),你可能需要安装程序集的私有副本,并在应用程序配置中覆盖它们。

这里是我用来重写某些程序集以进行调试的黑客攻击:

在您的exe文件夹中,将名为yourexename.exe.config的文件与策略信息重定向到真正的程序集版本,将永远不会存在于全局缓存中。 例如:

 <configuration> <windows> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity type="win32" name="someassemblyname" processorArchitecture="x86" publicKeyToken="sometoken"/> <bindingRedirect oldVersion="1.0.0.0-1.0.999.998" newVersion="1.0.999.999"/> </dependentAssembly> </assemblyBinding> </windows> </configuration> 

把你想使用的程序集的内容放到同一个文件夹中,并编辑清单以获得你在上面使用的版本。 例如

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <noInheritable></noInheritable> <assemblyIdentity type="win32" name="someassemblyname" version="1.0.999.999" processorArchitecture="x86" publicKeyToken="sometoken"></assemblyIdentity> <file name="somedll.dll"/> </assembly> 

最后,您将在安装文件夹中获得以下文件:

 yourexename.exe yourexename.exe.config somedll.dll someassemblyname.manifest 

而您的可执行文件将拿起DLL的私人副本。

更多信息: 应用程序配置文件

编辑:如果你有像“应用程序未能正确初始化”或“并排配置不正确”(你拥有它们,一旦你开始玩sxs)的问题,使用sxstrace工具进行诊断(Windows XP上不可用)。 这会告诉你究竟哪个组件会导致问题。