【问题标题】:Portable application requires non portable dll便携式应用程序需要非便携式 dll
【发布时间】:2016-02-12 08:37:30
【问题描述】:

我有一个应该从 USB 运行的 Windows 应用程序,并且不允许在本地 PC 上安装任何软件。该应用程序使用 MSXML 版本 4,因此需要 msxml4.dll。

在代码中,应用程序使用 Windows COM 来实例化 (CreateInstance/CoCreateInstance) XML 文档/元素对象,并且 COM 确实(以某种方式神奇地)在运行时为我加载所需的 dll。 据我了解,COM需要用regsvr32工具注册dll才能找到并成功加载。问题是我不允许运行 regsvr32 工具,我也不想这样做,因为它会更改系统注册表(我猜)。

但是如果我不允许向系统注册任何 dll 怎么办,有没有办法告诉 COM 有一个 dll 只能暂时使用?我知道DLL redirection,但这只有在之前注册了 dll 的情况下才有效。

【问题讨论】:

  • 目标系统上是否尚未安装 MSXML 4?
  • 不,MSXML 6 是。这很好,应该始终用于完成工作。无需无注册清单。

标签: c++ windows dll com loadlibrary


【解决方案1】:

您对 COM 的猜测是正确的,它使用注册表信息(由 GUID 索引)来加载 DLL 并为您创建实例。我不认为你可以绕过 COM 而不注册 DLL。您应该尝试使用其他没有 COM 的 DLL 来处理您的应用程序中的 XML。

如果我没记错的话,COM DLL 将隐藏你实例的所有符号,即你不能动态加载它。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2011-02-01
  • 2011-02-20
  • 2016-06-20
相关资源
最近更新 更多