相关疑难解决方法(0)

使用清单的DLL重定向

我需要可靠地重定向应用程序查找特定的DLL.使用app.exe.local方法不起作用,因为如果应用程序具有清单(嵌入或单独的文件),则会忽略本地文件.所以我试图通过将DLL定义为清单中的私有程序集来进行DLL重定向.

我有一个测试应用程序,LoadDll.exe只是调用

LoadLibrary("C:\\EmptyDll.dll");
Run Code Online (Sandbox Code Playgroud)

LoadDll.exe具有清单(作为单独的文件,LoadDll.exe.manifest)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
  version="1.0.0.1"
  processorArchitecture="x86"
  name="LoadDll"
  type="win32"
/>
<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="EmptyDll"
      version="1.0.0.1"
      processorArchitecture="x86"
    />
  </dependentAssembly>
</dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)

包含LoadDll.exe(NOT c:\)的Application文件夹包含带有嵌入式清单的EmptyDll.dll.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<assemblyIdentity
      type="win32"
      name="EmptyDll"
   version="1.0.0.1"
      processorArchitecture="x86"
    />    
</assembly>
Run Code Online (Sandbox Code Playgroud)

但是,LoadDll.exe继续并加载C:\ EmptyDll.dll,而不是应用程序文件夹中的EmptyDll.dll.

如果您中断任一清单(例如,更改EmptyDll.dll清单标识中的版本号),则不会加载LoadDll.exe,因此清单文件正由Windows读取和处理,但只是被忽略.

有人有任何想法吗?

谢谢!

托比

c++ windows dll manifest

18
推荐指数
2
解决办法
2万
查看次数

一种从中央存储库加载DLL的方法

我们有很多产品,每个产品的应用程序都有一些常见的DLL.现在我们将每个常见的DLL复制到每个产品的bin目录中,并将它们视为私有程序集.这不必要地增加了每个产品的msi大小,当DLL中出现问题时,我们必须构建包含DLL的每个产品的msi并进行部署.

反正是指示产品应用程序使用公共私有目录来加载DLL [使用manifest scheme ..]?[注意:将私有目录添加到PATH env将不会提供解决方案,就好像SYSTEM目录中存在具有相同名称的DLL一样,这将获取对我们的私人目录的特权]

-Kartlee

c c++ windows dll

9
推荐指数
2
解决办法
4718
查看次数

如何在单独的目录中运行带有DLL的.exe?

我知道这已经在这里讨论了,但是我没有找到我想要的问题,即:我有一个C++应用程序,它使用了很多(超过20-30个)DLL.我已经在我的Visual Studio 2010项目中定义了.exe将被复制到ProjectDir(这样一切都很整洁)但是当.exe单独站在ProjectDir中时它无法访问存储在bin中的DLL. //任何文件夹以及许多其他文件.

我可以以某种方式指向DLL文件夹,以便应用程序知道它们的位置吗?(并且<myapp>.exe.local文件夹在我的Windows 7中不起作用)

c++ dll visual-studio

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×3

dll ×3

windows ×2

c ×1

manifest ×1

visual-studio ×1