【问题标题】:Outlook-Redemption issue with Outlook 32 bit on 64 bit machine64 位计算机上的 Outlook 32 位的 Outlook-Redemption 问题
【发布时间】:2014-01-09 18:37:26
【问题描述】:

我遇到了兑换问题,因为 Outlook 32 位可以安装在 64 位计算机上。 RedemptionLoader 无法确定安装在 64 位计算机上的 Outlook 的位版本。有没有人遇到过这种情况?

【问题讨论】:

  • 离题。该站点用于编程问题。我们不是一般的软件技术支持。
  • @Marc B:这是一个编程问题。
  • 不,这是软件安装/配置问题。
  • @Marc B:软件安装/配置问题仍然经常以编程方式解决。在我看来,这对 SO 来说是一个合理的问题。

标签: 32bit-64bit outlook-redemption


【解决方案1】:

问题是您不能在 64 位进程中使用 32 位 DLL。但是经过长时间的搜索,我找到了一种解决方法。 可以在 32 位 DllHost.exe 进程中运行 32 位 Redemption-DLL。现在您可以通过 x64 或 AnyCPU 应用程序访问此 DllHost.exe*32,因为这是可能的。

这听起来很复杂,但相对简单。

首先在系统上注册您的 Redemption.dll (x86)。我是通过以下方式完成的:

regsvr32.exe "C:\Program Files (x86)\Redemption\Redemption.dll"

如果您在未注册 Redemption.dll 的情况下启动应用程序,您将收到如下异常:

COMException: Retrieving the COM class factory for component with CLSID {29AB7A12-B531-450E-8F7A-EA94C2F3C05F} failed due to the following error: 80040154 Klasse nicht registriert (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

注册 32 位 DLL 后,您需要向注册表添加一些键和值。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Wow6432Node\AppID\{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}]
"DllSurrogate"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}]
"AppID"="{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\AppID\{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}]
"DllSurrogate"=""

现在启动应用程序时发生的情况是系统启动了一个 DllHost 进程,该进程在 x86 环境中加载 Redemption.dll。启动 x64 应用程序后,您将在任务管理器上看到带有 COM Surrogate 描述的dllhost.exe*32。所有对 Redemption.dll 的访问现在都将路由到 DllHost。

当然,您只能在带有 x86 Outlook 客户端的 x64 系统上添加这些注册表项;)

希望这会对你们中的一些人有所帮助:)

【讨论】:

    【解决方案2】:

    RedemptionLoader 不会确定 Outlook 位数,因为它对您没有任何好处:它会确定调用进程的位数并加载适当版本的 Redemption(32 位与 64 位),但如果出现以下情况,则会引发错误您的流程/赎回位数与 Outlook 位数不同。 64位进程无法加载32位dll。

    更多详情请见http://www.dimastr.com/redemption/faq.htm#ErrorCreatingRedemptionObject。

    【讨论】:

    • 感谢您提供此信息。这让我意识到像这样的混合用例无法解决。有没有办法让代码不敏感?
    • 不,当您的代码运行时,它已经具有特定的位数。并且它无法加载具有不同位数的 dll。唯一的解决方法是编译您的应用程序的两个版本(32 位和 64 位)而不是单个“任何 CPU”,并根据 Outlook 位数安装适当的版本(您可以从注册表中读取它)。
    【解决方案3】:

    可以在 64 位 PowerShell 会话中加载 32 位 DLL。详情请见我的answer here。

    简而言之,您可以使用 Start-Job -RunAs32 加载 32 Bit PowerShell 版本

    【讨论】:

    • 您可以启动 32 位 exe,但不能启动 dll - dll 始终在父进程的上下文中加载。
    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2018-05-16
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多