Ransom + Clickonce = :-(
I have a regular Windows Form (Not VSTO) program that expands with a click once. The problem is that users workloads have issues with random errors usually indicating (from IClassFactory failed due to the following error: 80004005).
I'm deploying Redemption by changing the mode to "Isolated" which seems to work for some users but not others.
Users who are not working can be fixed by manually installing DLL Redemption.
Can anyone explain how to automate the process (I really want it to be free, so users don't need admin permission to install).
thank
Ross
source to share
Outlook Redemption (Redemption.dll) and Background Threading are not mixed.
As in your situation, we log into Exchange Server using a background thread.
This results in intermittent Redemption errors that cannot log into Exchange.
Also, one of my coworkers put the email call to email in a background thread and, again, sometimes it worked and sometimes it didn't.
When using Redemption, always let the main UI thread handle it.
Redemption does not actually block the application, as there are actually no lengthy processes when an email comes up, an entry is added, or even connects to an Email Submission Sent event to handle the logging of information sent by email, etc.
source to share
It is entirely possible to use Redemption on a background thread if you do it right. The firsr RDOSession object being created must be created on the UI thread because some internal MAPI elements must be created on the same thread for the message pump to be created. Typically this RDOSession should be kept for the lifetime of your application. You cannot access this object from any other thread.
You need to pass the MAPIOBJECT property of your first RDOSession for each worker thread, create a new RDOSessuion object from each thread, and assign the MAPIOBJECT from your RDOSession to the secondary RDOSession created on the thread. Example:
(Aircode Warning: The code below was entered from memory.)
Dim PrimaryRDOSession As New Redemption.RDOSession()
PrimaryRDOSession.Login([...])
Dim WorkerThread as New System.Threading.Thread(AddressOf ThreadProc)
WorkerThread.Start(PrimaryRDOSession.MAPIOBJECT)
Sub ThreadProc(ByVal param as Object)
Dim ThdRDOSession As New Redemption.RDOSession()
ThdRDOSession.MAPIOBJECT = param
' do other stuff
End Sub
From there, you can do whatever you would normally do with Redemption. You can pass EntryIDs between threads if Outlook objects are selected / located in one thread and act on another.
source to share