Выкуп + Clickonce = :-( - PullRequest
       19

Выкуп + Clickonce = :-(

1 голос
/ 21 июля 2009

У меня есть обычная программа Windows Forms (не VSTO), которая развертывается одним щелчком мыши. Проблема заключается в том, что у многих пользователей возникают проблемы со случайными ошибками, обычно заявляющими (из-за сбоя IClassFactory возникла следующая ошибка: 80004005).

Я развертываю «Искупление», изменив режим на «Изолированный», который, по-видимому, работает для некоторых пользователей, но не для других.

Пользователи, которые не работают, могут быть исправлены путем ручной установки DLL погашения.

Может кто-нибудь объяснить, как автоматизировать процесс (я действительно хочу, чтобы он был бесплатным), чтобы пользователям не требовалось разрешение администратора для установки).

Спасибо

Ross

Ответы [ 3 ]

3 голосов
/ 26 июля 2009

Получил это решено. Проблема заключалась в том, что я загрузил объекты погашения в фоновом потоке и пытался манипулировать ими в потоке пользовательского интерфейса. Убедитесь, что вы последовательны при использовании объектов.

1 голос
/ 29 июля 2012

Вполне возможно использовать Redemption в фоновых потоках, если вы делаете это правильно. Созданный вами объект RDOSession firsr должен быть создан в потоке пользовательского интерфейса, поскольку некоторые внутренние компоненты MAPI нуждаются в том, чтобы насос сообщений был создан в том же потоке. Обычно эта RDOSession должна храниться в течение всего времени жизни вашего приложения. Вы не можете получить доступ к этому объекту из любого другого потока.

Вам нужно будет передать свойство MAPIOBJECT вашего первого RDOSession каждому рабочему потоку, создать новый объект RDOSessuion из каждого потока и назначить MAPIOBJECT из вашего RDOSession вторичной RDOSession, созданной в потоке. Пример:

(предупреждение о воздушном коде: приведенный ниже код был набран из памяти.)

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

Оттуда вы можете делать все, что вы обычно делаете с Redemption. Вы можете передавать EntryID между потоками, если объекты Outlook выбраны / расположены в одном потоке, а действия выполняются в другом.

0 голосов
/ 05 февраля 2012

Outlook Redemption (Redemption.dll) и фоновые потоки не смешиваются.

Как и в вашей ситуации, мы входили в Exchange Server с использованием фонового потока.

Это приводит к тому, что Redemption периодически не может войти в Exchange.

Кроме того, один из моих коллег поместил вызов Email Pop в фоновом потоке, и, опять-таки, иногда он работал, а иногда - нет.

При использовании Redemption всегда позволяйте основному потоку пользовательского интерфейса обрабатывать свои операции.

Погашение на самом деле не блокирует приложение, так как на самом деле длительных процессов при отправке сообщения электронной почты, добавлении встречи или даже подключении к событию «Погашение отправленного письма» для обработки регистрации информации, отправленной по электронной почте и т. Д.

...