2009-07-21 10 views
1

J'ai un programme Windows Forms normal (pas VSTO) qui se déploie en utilisant click une fois.Le problème est que des charges d'utilisateur ont des problèmes avec des erreurs aléatoires indiquant généralement (de l'IClassFactory échoué en raison de la erreur suivant: 80004005)Redemption + Clickonce = :-(

Im déploiement Redemption en changeant le mode « isolé » qui semble fonctionner pour certains utilisateurs, mais pas d'autres

les utilisateurs qui arn't de travail peut être résolu en installant manuellement.. Redemption DLL

Quelqu'un peut-il expliquer comment automatiser le processus (je veux vraiment qu'il soit reg gratuit pour que les utilisateurs ne nécessite pas d'autorisation d'administrateur pour l'installation).

Merci

Ross

Répondre

3

a obtenu ce résolu. Le problème était que j'avais chargé des objets de redemption sur un thread d'arrière-plan, et essayait de les manipuler sur le thread de l'interface utilisateur. Assurez-vous que vous êtes cohérent lors de l'utilisation des objets.

+0

Fonctionne toujours mieux lorsque j'essaie d'expliquer le problème :) J'ai répondu à quelques-unes de mes questions. – leppie

0

Outlook Redemption (Redemption.dll) et le thread d'arrière-plan ne se mélangent pas. Comme pour votre situation, nous nous connections à Exchange Server à l'aide d'un thread d'arrière-plan. Cela a conduit à des erreurs intermittentes de Redemption ne pouvant pas se connecter à Exchange.

En outre, l'un de mes collègues avait placé un appel de messagerie électronique dans un fil de discussion et, parfois, cela fonctionnait et parfois non. Lorsque vous utilisez Redemption, laissez toujours le thread principal de l'interface utilisateur gérer ses opérations.

Redemption ne se verrouille pas vraiment l'application car il n'y a vraiment pas de temps processus en cours d'exécution lors de popping un e-mail, en ajoutant un rendez-vous ou même accrocher dans le courriel a été envoyé événement Redemption pour gérer l'enregistrement des informations envoyées par courrier électronique, etc.

+0

Vous vous trompez. Vous pouvez utiliser la rédemption d'un autre thread. –

+0

Muffin man, je ne peux que passer par l'expérience. Aussi, regardez ce que la résolution de soi à cette question était! Je suis surpris que je n'ai pas eu de vote sur celui-ci! Geezz ..:) – ElMatador

0

Il est tout à fait possible d'utiliser Redemption dans les threads d'arrière-plan, si vous le faites correctement. Le premier objet RDOSession que vous créez doit être créé dans le thread d'interface utilisateur, car certains composants internes MAPI ont besoin que le message pump ait été créé dans le même thread. Généralement, ce RDOSession doit être conservé pendant toute la durée de vie de votre application. Vous ne pouvez pas accéder à cet objet à partir d'un autre thread.

Vous devez transmettre la propriété MAPIOBJECT de votre premier RDOSession à chaque thread de travail, créer un nouvel objet RDOSessuion à partir de chaque thread et affecter le MAPIOBJECT de votre RDOSession au RDOSession secondaire créé dans le thread. Exemple:

(Aircode Attention:. Le code ci-dessous a été tapé de la mémoire)

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 

De là, vous pouvez faire tout ce que vous auriez normalement faire avec la Rédemption. Vous pouvez passer des EntryID entre des threads si des objets Outlook sont sélectionnés/localisés dans un thread et agis dans un autre.