【问题标题】:Redemption + Clickonce = :-(兑换 + Clickonce = :-(
【发布时间】:2009-07-21 10:17:18
【问题描述】:

我有一个普通的 Windows 窗体程序(不是 VSTO),它使用单击一次进行部署。问题是大量用户遇到随机错误的问题,通常说明(由于以下错误,IClassFactory 失败:80004005)。

我通过将模式更改为“隔离”来部署 Redemption,这似乎对某些用户有效,但对其他用户无效。

可以通过手动安装 Redemption DLL 来修复无法使用的用户。

谁能解释如何自动化这个过程(我真的希望它是免费的,所以用户不需要管理员权限来安装)。

谢谢

罗斯

【问题讨论】:

    标签: c# com clickonce outlook-redemption


    【解决方案1】:

    解决了这个问题。问题是我在后台线程上加载了兑换对象,并试图在 UI 线程上操作它们。确保在使用对象时保持一致。

    【讨论】:

    • 在尝试解释问题时总是效果更好 :) 我已经回答了很多问题。
    【解决方案2】:

    如果操作正确,完全可以在后台线程中使用 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
    

    从那里你可以做任何你通常用 Redemption 做的事情。如果 Outlook 对象在一个线程中被选中/定位,并在另一个线程中执行,则您可以在线程之间传递 EntryID。

    【讨论】:

      【解决方案3】:

      Outlook Redemption (Redemption.dll) 和后台线程不能混合使用。

      与您的情况类似,我们使用后台线程登录到 Exchange Server。

      这会导致 Redemption 出现间歇性错误,无法登录 Exchange。

      另外,我的一位同事在后台线程中放置了一个电子邮件弹出调用,同样,有时它会工作,有时它不会。

      使用 Redemption 时,始终让主 UI 线程处理它的操作。

      兑换并没有真正锁定应用程序,因为在弹出电子邮件、添加约会甚至挂钩到电子邮件发送兑换事件以处理通过电子邮件发送的信息的日志记录等时,确实没有长时间运行的进程。

      【讨论】:

      • 你错了。您可以从另一个线程使用 Redemption。
      • 松饼人,我只能凭经验。另外,看看这个问题的自我解决方案是什么!我很惊讶我没有对这个投赞成票!天哪.. :)
      • 我们只是重写了部分加载项以在后台线程上执行可能较慢的 MAPI 操作,而不是像使用 Outlook 对象模型时那样阻塞 UI 线程。我可以向你保证,这是可以做到的。
      • 如果工作线程中的每个会话对象都单独登录,则说明您没有正确登录,一旦他们从第一个会话传递 MAPIOBJECT 属性以连接其他会话,请登录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2021-10-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多