gpt4 book ai didi

c++ - Windows 7 上的 DLL 重定向

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

我正在尝试在 Windows 7 x64 机器上执行 DLL 重定向。我有一个第三方应用程序说 App.exe它位于 %PROGRAMFILES%\SomeApp\App.exe . App.exe 是 native 非托管 Windows 应用程序,依赖于非托管 native DLL,例如 foo.dll存在于 C:\Windows\System32

现在我有了自己的 foo.dll 版本我想要 App.exe加载而不是 C:\Windows\System32 中的那个.

以下是我在 XP 上尝试并运行良好的方法:

  1. 创建 list 文件 App.exe.manifest
  2. 复制我的 foo.dll 版本在 %PROGRAMFILES%\SomeApp 内.这与 App.exe 所在的目录相同居住。
  3. 在 list 文件中,指定 DLL 依赖项(尤其是与 MS VC 运行时相关的)并且还包括 <file name="foo.dll">
  4. 启动应用程序。

但是,这不适用于 Windows 7。

我四处搜索,我的研究让我找到了 this MSDN 讨论。这里的答案讨论了创建程序集和提供配置文件(例如 App.exe.config )。 MSDN 没有谈论这个。因此我的第一个问题:

是否必须将我们的非托管 DLL 包装到上面链接中提到的程序集中,是否还必须有一个应用程序配置文件才能进行 DLL 重定向?

此外,我还提到了 WinSxS 中存在的一些应用程序 list 。 Windows 7 中的文件夹并找到一些包含 <file> 的 list 文件元素入口如下:

<file hash="6bd4c0b867d2ec23a03fc1b290abc62a7d7d0908" 
hashalg="SHA1"
name="aspnet_regiis.exe"
destinationPath="$(runtime.windows)\Microsoft.NET\Framework64\v2.0.50727\"
sourceName="aspnet_regiis.exe"
sourcePath="Win\Microsoft.NET\Framework\URTInstallPath\"
importPath="$(build.nttree)\netfx\Win\Microsoft.NET\Framework\URTInstallPath\">

因此我的第二个问题:

destinationPath的属性是什么? , sourceName , sourcePathimportPath代表?这些未记录在 Assembly Manifest 中或 Application Manifest MSDN 文档。

我的第三个问题(由第一个和第二个暗示):

什么是正确的<file>必须在 App.exe.manifest 中指定的标记条目,以便提取我的 foo.dll 版本?

欢迎任何其他在 Windows 7 上实现 DLL 重定向的指针。

最佳答案

尽可能避免 DLL 重定向。将所有 DLL 放入与 EXE 相同的文件夹中。这只是 MSVC DLL 本身无法避免的。在安装程序中将 redist 作为依赖项安装通常可以解决这些问题。

关于c++ - Windows 7 上的 DLL 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912955/

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