2009-07-21 8 views
1

通常のwindowsフォームプログラム(VSTOではない)をクリックして展開すると、ユーザーの負荷が一般的に(IClassFactoryが失敗したために失敗した) 。。エラー以下:80004005)一部のユーザーではなく、他人のために働くように見える「孤立」にモードを変更することにより、償還を展開Redemption + Clickonce = :-(

イム

作業arn'tユーザーが手動でインストールすることで固定することができます。 Redemption DLL。

誰でもプロセスを自動化する方法を説明できますかインストールには管理者権限が必要ありません)。

ロス

答えて

3

おかげでこれは解決手に入れました。問題は、バックグラウンドスレッドで償還オブジェクトを読み込み、UIスレッドで償還オブジェクトを操作しようとしていたことです。オブジェクトを使用する際に一貫性があることを確認してください。

+0

問題を説明しようとすると、いつもよりうまく動作します:)私は多くの質問に答えました。 – leppie

0

Outlook Redemption(Redemption.dll)とBackground Threadingは混在しません。

状況に応じて、バックグラウンドスレッドを使用してExchange Serverにログインしていました。

これは、Redemptionの断続的なエラーがExchangeにログインできなくなる原因になります。

また、私の同僚の一人がバックグラウンドスレッドに電子メールポップコールを入れていましたが、時にはそれがうまくいくこともありました。

Redemptionを使用する場合は、メインのUIスレッドで常に操作を処理させてください。

何の長い実行中のプロセスが実際に存在しないとして電子メールを飛び出るとき償還が本当になど、予定を追加したり、電子メールを介して送信される情報のログを処理するために償還イベントを送信した電子メールの中にフック、アプリケーションをロックしない

+0

あなたは間違っています。他のスレッドからの引き換えを使用することができます。 –

+0

マフィンマン、私は経験だけで行くことができます。また、この質問に対する自己解決が何であったかを見てください。私はこの1つの議決権を得られなかったことに驚いています!さようなら..:) – ElMatador

0

正しく実行すると、バックグラウンドスレッドでRedemptionを使用することは完全に可能です。 MAPI内部では同じスレッドでメッセージポンプを作成する必要があるため、作成するfirsr RDOSessionオブジェクトはUIスレッドで作成する必要があります。通常、このRDOSessionはアプリの存続期間中保持する必要があります。他のスレッドからこのオブジェクトにアクセスすることはできません。

最初のRDOSessionのMAPIOBJECTプロパティを各ワーカースレッドに渡し、各スレッド内から新しいRDOSessuionオブジェクトを作成し、RDOSessionのMAPIOBJECTをスレッドで作成された2次RDOSessionに割り当てる必要があります。例:

(Aircode警告:以下のコードがメモリから入力した)

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 

そこから、あなたは通常、償還を行うだろう何かを行うことができます。 Outlookオブジェクトがあるスレッドで選択/配置され、別のスレッドで操作された場合、スレッド間でEntryIDを渡すことができます。