user3067752
user3067752

Reputation: 65

Outlook-Redemption issue with Outlook 32 bit on 64 bit machine

I'm having issues with redemption because Outlook 32 bit can be installed on a 64 bit machine. The RedemptionLoader doesn't determined the bit version of Outlook installed on a 64 bit machine. Has anyone run into this before?

Upvotes: 3

Views: 5002

Answers (3)

Dmitry Streblechenko
Dmitry Streblechenko

Reputation: 66286

RedemptionLoader does not determine Outlook bitness because it won't do you any good: it determines the bitness of the calling process and loads the appropriate version of Redemption (32 vs 64 bit), but that can raise an error if the bitness of your process/Redemption is different from the Outlook bitness. A 32 bit dll cannot be loaded by a 64 bit process.

Or you can create an instance of the RDOSession object in the Outlook address space (where it is guaranteed to match the bitness of Outlook/MAPI) using Application.CreateObject in OOM (see the link below). The object will be out-of-proc of course, so it might be slower.

See http://www.dimastr.com/redemption/faq.htm#ErrorCreatingRedemptionObject for more details.

Upvotes: 2

DarkLite1
DarkLite1

Reputation: 14745

It is possible to load a 32 bit DLL in a 64 bit PowerShell session. See my answer here for more details.

In short, you can use Start-Job -RunAs32 which loads a 32 Bit PowerShell version

Upvotes: 0

user3405293
user3405293

Reputation: 51

The problem is that you can't use 32 bit DLLs in 64 bit processes. But there's a workaround I've found after a long period of search. It's possible to run the 32 bit Redemption-DLL in a 32 bit DllHost.exe process. Now you're able to access this DllHost.exe*32 by your x64 or AnyCPU application, because THAT is possible.

That sounds complicated but is relatively simple.

First register your Redemption.dll (x86) on the system. I've done it this via:

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

If you start your application without registering the Redemption.dll you'll get an exception like:

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)).

Once the 32 bit DLL ist registered you need to add some keys and values to your Registry.

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"=""

What's now happening when start your application is that the system starts a DllHost process which loads the Redemption.dll in a x86 environment. You will see a dllhost.exe*32 with a COM Surrogate description on task manager, after you've started your x64 application. All accesses to Redemption.dll will now be routed to the DllHost.

Of course you have to add these registry keys only on x64 systems with a x86 Outlook client ;)

Hope this will help some of you :)

Upvotes: 5

Related Questions