2009-07-21 55 views
1

我有一個正常的Windows窗體程序(不VSTO),它使用部署單擊一次。問題是,用戶負載有與隨機誤差一般說明(從IClassFactory的失敗,原因是問題以下錯誤:80004005)贖回+的ClickOnce = :-(

林通過改變這似乎對一些用戶,但不是別人的工作模式爲「隔離」部署贖回

是arn't工作可以通過手動安裝固定的用戶。贖回DLL。

誰能解釋如何自動化過程(我真的希望它是REG免費的,所以用戶不需要管理員權限來安裝)。

感謝

羅斯

回答

3

得到這個解決。問題是我在後臺線程上加載了兌換對象,並試圖在UI線程上操作它們。確保您在使用這些對象時保持一致。

+0

試圖解釋問題時總是會更好:)我已經回答了我的很多問題。 – leppie 2009-07-26 14:47:05

0

Outlook Redemption(Redemption.dll)和Background Threading不混合。

您的情況類似,我們用的是後臺線程登錄到Exchange服務器。

這導致了不能夠登錄到交易贖回的間歇性錯誤。

而且,我的一個同事已經把電子郵件流行的呼叫在後臺線程,並再次,有時它會工作,有時不會。

使用Redemption時,總是讓主UI線程處理它的操作。

贖回並沒有真正鎖定的應用程序,也有真的沒有長時間運行的進程彈出的電子郵件時,添加新安排,甚至鉤住郵件發送贖回事件來處理通過電子郵件發送的信息記錄等

+0

你錯了。您可以使用另一個線程的Redemption。 – 2014-12-19 18:21:06

0

如果你做得正確,完全可以在後臺線程中使用Redemption。您創建的第一個RDOSession對象必須在UI線程中創建,因爲某些MAPI內部部件需要在同一個線程中創建消息泵。通常,這個RDOSession應該保存在您的應用程序的整個生命週期中。您不能從任何其他線程訪問此對象。

您需要將第一個RDOSession的MAPIOBJECT屬性傳遞給每個工作線程,從每個線程內創建一個新的RDOSessuion對象,並將您的RDOSession的MAPIOBJECT分配給線程中創建的輔助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。