2009-08-13 11 views
1

Je déploie un complément Outlook 2007 en cours de création dans Visual Studio 2008 en utilisant C#. J'ai créé une fonction pour extraire le texte d'un document Word. Le problème est qu'environ 20% du temps, cela prendra temporairement le focus et le donnera à mon addin. Je me suis assis et j'ai regardé l'explorateur de processus de sysinternal pendant environ 10 minutes pendant que mon add-in était en cours d'exécution et cela est seulement arrivé lorsque le processus de traitement de texte fonctionnait depuis plus de 2 secondes. Une fois que le processus WINWORD s'est fermé, la mise au point revient au programme précédent.Pourquoi le mot est-il un processus d'arrière-plan via Outlook Addin?

Est-ce que quelqu'un sait pourquoi le processus WINWORD volerait le focus au nom de mon complément et comment l'éviter?

public static string ExtractWordDocument(object filename) 
    { 
     Word.Application wordApp = new Word.Application(); 

     string content = null; 
     Word.Document doc = null; 

     try 
     { 
      doc = wordApp.Documents.OpenNoRepairDialog(
         ref filename, 
         ref officeObjects.Negative, 
         ref officeObjects.ReadOnly, 
         ref officeObjects.Negative, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Negative, 
         ref officeObjects.Negative, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj, 
         ref officeObjects.Nullobj); 

      content = doc.Content.Text; 
     } 
     catch (Exception exc) 
     { 
      Util.Log("Error processing word document - Exception received: " + exc.ToString()); 
     } 

     if (doc != null) 
     { 
      ((Word._Document)doc).Close(ref officeObjects.SaveChanges, ref officeObjects.OriginalFormat, ref officeObjects.RouteDocument); 
     } 

     ((Word._Application)wordApp).Quit(ref officeObjects.SaveChanges, ref officeObjects.OriginalFormat, ref officeObjects.RouteDocument); 

     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wordApp); 

     doc = null; 
     wordApp = null; 

     return content; 
    } 

Répondre

1

Aucune raison de ce comportement n'a jamais été trouvée mais nous avons fini par aller avec une implémentation IFilter qui l'a rendu inutile.

Pour quelqu'un d'autre qui cherche simplement à extraire du texte à partir d'un document Word - n'utilisez pas de mot, utilisez un IFilter.

0

Et si vous dites:

wordApp .Visible = false; 

? Editer: Oh, attendez que vous disiez que votre addin aura le focus, pas l'instance de mot. Eh bien, essayez de toute façon :)

+0

no-go. Ne change pas du tout de comportement. – McAden

Questions connexes