- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
背景:
C:\windows\Winsxs
文件夹policies
和 Manifests
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
),“名称”(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/
如果我将模块链接到使用 WinSxS 部署的 mydll.dll,则模块中的 PE header 将简单地引用“mydll.dll”。 Windows 在运行时如何确定,首先应该通过 WinSxS 加
经过大量试验和错误(主要是由于缺乏文档和示例),我成功创建了 MSI 安装程序,将自定义 DLL 作为并行程序集安装到 WinSxS。只有一个问题:卸载会将所有文件(DLL、 list 和目录)留在
我已经安装:Microsoft Visual C++ 2008 SP1 可再发行组件包 (x86) 得到以下文件夹:x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.
我遇到了几个 VC++ DLL 的问题,我应该将其包含到我的 .NET/C# 项目中。一个 VC++ DLL 是 C++/CLI DLL,我将其用作 .NET 项目的公共(public)接口(inte
我需要添加对特定版本的 GDIPlus 的依赖。这是我想要的 GDI+ 版本: 我想确定我使用这个版本是出于特定的兼容性原因。 我已经在我的可执行文件中添加了一个程序集 list ,定义了我对 Gdi
我有一个 Win32 程序集(我的 .NET 代码上的 C++/CLI 包装器),它应该安装在 WinSxS 中,并且应该由使用 API 的客户端应用程序从该位置引用。我对如何在 WinSxS 中安装
Windows 有一个 WinSXS 目录,用于存储某些系统文件的旧版本,以备您要回滚服务包或类似文件时使用。 (这些存储为硬链接(hard link),因此那里的许多文件都指向与当前系统文件相同的磁
假设我有一个使用 MSHTML 的应用程序。安装 IE9 beta 会更新 MSHTML,这会破坏我的应用程序。我发现 IE8 dll 的副本仍然存在于 WinSxS 文件夹中,所以也许我可以以某种方
在 Windows XP 上,我有一个以 msvcp90.dll 运行的 .exe , msvcr90.dll , 和 Microsoft.VC90.CRT.manifest在我的本地应用程序目录中。
我有一个可执行文件, list 上说它取决于 Microsoft.VC90.CRT 9.0.21022.8 Microsoft.VC90.CRT 9.0.30729.1 在 Windows 7 上,这
我真的很想知道一个问题。 我在我的机器上安装了各种版本的 visual studio 2008 再分发包。现在,30729.6161 是最新的。 在这个环境下,我制作了一个简单的程序,其中嵌入了 li
我是一名优秀的程序员,十分优秀!