Pra*_*nde 5 c++ windows dll windows-7
我正在尝试在Windows 7 x64计算机上执行DLL重定向。我有一个App.exe位于的第三方应用程序说%PROGRAMFILES%\SomeApp\App.exe。App.exe是本机非托管Windows应用程序,并且依赖于非托管本机DLL,例如foo.dll,DLL 中存在C:\Windows\System32
现在foo.dll,我要App.exe加载自己的版本,而不是其中的版本C:\Windows\System32。
这是我在XP上尝试并能正常使用的方法:
App.exe.manifestfoo.dll范围内%PROGRAMFILES%\SomeApp。这是App.exe驻留在同一目录。<file name="foo.dll">但是,这在Windows 7上不起作用。
我四处搜寻,我的研究使我进入了这个 MSDN讨论。这里的答案是关于创建程序集以及提供配置文件(例如App.exe.config)的。MSDN没有谈论这个。因此,我的第一个问题是:
是否必须按照上述链接将非托管DLL包装到程序集中,是否还必须具有用于DLL重定向的应用程序配置文件?
此外,我还提到WinSxS了Windows 7文件夹中存在的一些应用程序清单,并找到了一些包含<file>元素条目的清单文件,如下所示:
<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\">
Run Code Online (Sandbox Code Playgroud)
因此,我的第二个问题是:
什么属性destinationPath,sourceName,sourcePath和importPath立场?这些没有记录在Assembly Manifest或Application Manifest MSDN文档中。
我的第三个问题(由第一个和第二个暗示):
<file>必须在App.exe.manifest中指定的正确标记项是什么,以便获取我的foo.dll版本?
欢迎在Windows 7上实现DLL重定向的任何其他指针。
如果可能的话,尽量避免 DLL 重定向。将所有 DLL 放入与 EXE 相同的文件夹中。这对于 MSVC DLL 本身来说是无法避免的。在安装程序中将 redist 作为依赖项安装通常可以修复这些问题。
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |