我有一个普通的 Windows 窗体程序(不是 VSTO),它使用单击一次进行部署。问题是大量用户遇到随机错误的问题,通常说明(由于以下错误,IClassFactory 失败:80004005)。
我通过将模式更改为“隔离”来部署救赎,这似乎适用于某些用户但不适用于其他用户。
无法工作的用户可以通过手动安装 Redemption DLL 来修复。
谁能解释如何自动化这个过程(我真的希望它是免费的,所以用户不需要管理员权限来安装)。
谢谢
罗斯
我有一个普通的 Windows 窗体程序(不是 VSTO),它使用单击一次进行部署。问题是大量用户遇到随机错误的问题,通常说明(由于以下错误,IClassFactory 失败:80004005)。
我通过将模式更改为“隔离”来部署救赎,这似乎适用于某些用户但不适用于其他用户。
无法工作的用户可以通过手动安装 Redemption DLL 来修复。
谁能解释如何自动化这个过程(我真的希望它是免费的,所以用户不需要管理员权限来安装)。
谢谢
罗斯
解决了这个问题。问题是我在后台线程上加载了兑换对象,并试图在 UI 线程上操作它们。确保在使用对象时保持一致。
如果操作正确,完全可以在后台线程中使用 Redemption。您创建的第一个 RDOSession 对象必须在 UI 线程中创建,因为某些 MAPI 内部需要在同一线程中创建消息泵。通常,此 RDOSession 应在您的应用程序的整个生命周期内保留。您不能从任何其他线程访问此对象。
您需要将第一个 RDOSession 的 MAPIOBJECT 属性传递给每个工作线程,从每个线程中创建一个新的 RDOSessuion 对象,并将 RDOSession 中的 MAPIOBJECT 分配给线程中创建的辅助 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
From there you can do anything you'd normally do with Redemption. You can pass EntryIDs between threads if Outlook objects are selected/located in one thread, and acted upon in another.
Outlook Redemption (Redemption.dll) 和后台线程不能混合使用。
与您的情况类似,我们使用后台线程登录到 Exchange Server。
这会导致无法登录 Exchange 的 Redemption 间歇性错误。
此外,我的一位同事在后台线程中放置了一个电子邮件弹出呼叫,而且,有时它会工作,有时它不会。
使用 Redemption 时,始终让主 UI 线程处理它的操作。
Redemption 并没有真正锁定应用程序,因为在弹出电子邮件、添加约会甚至挂钩到 Email Sent Redemption 事件以处理通过电子邮件发送的信息的日志记录等时,确实没有长时间运行的进程。