救赎 + 单击一次 = :-(
我有一个普通的 Windows 窗体程序(不是 VSTO),它使用单击一次进行部署。 问题是,大量用户遇到随机错误的问题,通常指出(来自 IClassFactory 由于以下错误而失败:80004005)。
我通过将模式更改为“隔离”来部署救赎,这似乎对某些用户有效,但对其他用户无效。
无法工作的用户可以通过手动安装 Redemption DLL 来修复。
任何人都可以解释如何自动化该过程(我真的希望它是免费的,这样用户不需要管理员权限即可安装)。
谢谢罗斯
I have a normal windows forms program (Not VSTO) which deploys using click once. The issue is that loads of user are having problems with random errors generally stating (from the IClassFactory failed due to the following error: 80004005).
Im deploying Redemption by changing the mode to "Isolated" which appears to work for some users but not others.
The users that arn't working can be fixed by manually installing the Redemption DLL.
Can anyone explain how to automate the process (I really want it to be reg free so users don't need admin permission to install).
Thanks
Ross
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
解决了这个问题。 问题是我在后台线程上加载了兑换对象,并尝试在 UI 线程上操作它们。 确保使用对象时保持一致。
Got this resolved. The issue was I had loaded redemption objects on a background thread, and was trying to manipulate them on the UI thread. Ensure you are consistent when using the objects.
如果操作正确,完全可以在后台线程中使用 Redemption。 您创建的第一个 RDOSession 对象必须在 UI 线程中创建,因为某些 MAPI 内部需要在同一线程中创建消息泵。 通常,此 RDOSession 应在应用程序的整个生命周期内保留。 您无法从任何其他线程访问该对象。
您需要将第一个 RDOSession 的 MAPIOBJECT 属性传递给每个工作线程,从每个线程内创建一个新的 RDOSessuion 对象,并将 RDOSession 中的 MAPIOBJECT 分配给该线程中创建的辅助 RDOSession。 示例:
(Aircode 警告:下面的代码是凭记忆输入的。)
从那里您可以执行通常使用兑换执行的任何操作。 如果在一个线程中选择/定位 Outlook 对象并在另一个线程中进行操作,则可以在线程之间传递 EntryID。
It is entirely possible to use Redemption in background threads, if you do it correctly. The firsr RDOSession object you create, must be created in the UI thread, because some MAPI internals need for the message pump to have been created in the same thread. Typically this RDOSession should be kept for the lifetime of your app. You cannot access this object from any other thread.
You'll need to pass the MAPIOBJECT property of your first RDOSession to each worker thread, create a new RDOSessuion object from within each thread, and assign the MAPIOBJECT from your RDOSession to the secondary RDOSession created in the thread. Example:
(Aircode Warning: the code below was typed from memory.)
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 时,始终让主 UI 线程处理其操作。
兑换并不会真正锁定应用程序,因为在弹出电子邮件、添加约会甚至挂钩电子邮件发送兑换事件来处理通过电子邮件发送的信息的记录等时,实际上没有长时间运行的进程。
Outlook Redemption (Redemption.dll) and Background Threading do not mix.
Similar to your situation, we were logging into the Exchange Server using a background thread.
This lead to intermittent errors of Redemption not being able to log into Exchange.
Also, one of my colleagues had put an Email Pop call in a background thread and, again, sometimes it would work and sometimes it would not.
When using Redemption, always let the main UI thread handle it's operations.
Redemption does not really lock up the application as there are really no long running processes when popping an email, adding an appointment or even hooking into the Email Sent Redemption event to handle logging of information sent via email, etc.