2017-05-19 4 views
0

J'ai un VSTO add-in, qui recherche une tâche Outlook par un EntryID ou un sujet, et fait quelques opérations sur elle.ajouter dans Outlook VSTO 80.080.005 exception tout en regardant des tâches

Un des utilisateurs connectés le message d'erreur suivant de celui-ci:

Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))

est ici la fonction qui trouve l'objet Tâche

public Outlook.TaskItem FindTask(String EntryID, String Subject) 
{ 
    try 
    { 
     Outlook.Application OutlookApp = new Outlook.Application(); 
     Outlook.NameSpace ns = null; 
     Outlook.MAPIFolder tasksFolder = null; 
     Outlook.Items taskFolderItems = null; 
     Outlook.Items filteredtaskFolderItems = null; 
     Outlook.TaskItem task = null; 


     ns = OutlookApp.Session; 
     ns.SendAndReceive(false); 
     tasksFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks); 
     taskFolderItems = tasksFolder.Items; 

     //Try to find the task by entryID 
     dynamic OutlookItem = null; 
     OutlookItem = ns.GetItemFromID(EntryID); 
     if (OutlookItem != null) 
     { 
      if (OutlookItem is Outlook.TaskItem) 
      { 
       Outlook.TaskItem foundItem = (Outlook.TaskItem)OutlookItem; 
       return foundItem; 
      } 
     } 

     //If not found by EntryID, find it by a Subject 
     string subjectmatch = "[Subject] ='" + Subject + "'"; 
     filteredtaskFolderItems = taskFolderItems.Restrict(subjectmatch); 

     for (int i = 1; i <= filteredtaskFolderItems.Count; i++) 
     { 
      task = (Microsoft.Office.Interop.Outlook.TaskItem)filteredtaskFolderItems[i]; 
      return task; 
     } 
    } 
    catch(Exception ex) 
    { 
     //log exception 
    } 
    return null; 
} 

J'ai trouvé quelques explications pour le journal des erreurs , mais aucun d'entre eux sens vraiment fait (plusieurs utilisateurs accédant à la même interface COM, foiré registre etc.)

Tout signe clair que peut-être le code est erroné, et que est la raison pour laquelle cette exception est générée, ou c'est la faute d'Outlook?

Je dois mentionner que je suis instanciation Outlook à partir d'une autre application Office.

Répondre

0

Ce moyen le plus probable que votre application est en cours d'exécution dans un contexte de sécurité différent de celui d'Outlook.
L'application est-elle en cours d'exécution avec des privilèges élevés (Exécuter en tant qu'administrateur)?

En outre, si ce code est dans un Addin, pourquoi vous créez une nouvelle instance de la Outlook.Application au lieu d'utiliser l'instance passée à votre Addin?

+0

Bonjour Dmitry! Merci pour votre réponse, et d'être actif sur ces questions Outlook! Le code que j'ai mentionné ci-dessus s'exécute dans un complément Excel, où je crée une instance Outlook et fonctionne à partir de là. Le complément crée une connexion entre Excel et Outlook, c'est pourquoi j'instancie un nouvel objet Outlook. En ce qui concerne le contexte de sécurité, je n'ai connaissance d'aucune information à ce sujet, j'ai suivi les tutoriels et les articles de MSDN et le SDK pour le créer. Je ne peux pas reproduire le problème, mais certains de mes clients le peuvent. Il semble que Outlook expire quand il le veut, et provoque une exception .. D'autres idées? – Laureant

+0

De plus, je serais très heureux si vous pouviez vérifier cette question aussi: https://stackoverflow.com/questions/43782786/c-sharp-outlook-vsto-add-in-error-while-trying-to-get -item-in-an-exchange-setup C'est un autre programme Outlook, que je suis incapable de résoudre. – Laureant

+0

Alors, est-ce que l'un ou l'autre est lancé comme "Exécuter en tant qu'administrateur"? Cela fonctionne-t-il si Outlook ** n'est pas ** en cours d'exécution avant que votre code instancie une instance de l'objet Outklook.Applicaiton? –