gpt4 book ai didi

windows - Winsxs文件夹(windows运行时程序集目录)中的文件夹名称是什么意思

转载 作者:可可西里 更新时间:2023-11-01 11:34:03 26 4
gpt4 key购买 nike

背景:

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

例如文件夹名称:

  • 运行时间: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),“名称”(Microsoft.VC90.CRT)、“publicKeyToken”(1fc8b3b9a1e18e3b) 和程序集或策略的“版本”(9.0.30729.1)。

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


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

最佳答案

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

这是我用来覆盖某些程序集以进行调试的 hack:

在您的 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>

获取您要使用的程序集的内容,将其放入同一文件夹并编辑 list 以获得您在上面使用的版本。例如

<?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 的私有(private)副本。

更多信息在这里:Application Configuration Files

编辑:如果您遇到诸如“应用程序未能正确初始化”或“并排配置不正确”之类的问题(一旦您开始使用 sxs,您就会遇到这些问题),请使用 <强> sxstrace 诊断工具(虽然在 Windows XP 上不可用)。这将准确告诉您是哪个程序集导致了问题。

关于windows - Winsxs文件夹(windows运行时程序集目录)中的文件夹名称是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com