4
votes

Exception de Word.ApplicationClass.Activedocument tout d'un coup

J'ai cette seule ligne de code dans un projet de complément Word VSTO qui fonctionnait mais qui ne fonctionne plus soudainement:

Exception thrown: 'System.Deployment.Application.DeploymentException' in System.Deployment.dll
Exception thrown: 'System.Security.Cryptography.CryptographicException' in Microsoft.VisualStudio.Tools.Applications.Hosting.dll

Avant de simplement renvoyer le Document objet comme il était censé le faire, et je pouvais le lire et le manipuler sans problème. Mais maintenant, il lève une exception System.Runtime.InteropServices.COMException . "Word a rencontré un problème." Très utile. L'exception contient un HRESULT de 0x800A13E9, qui ne m'a pas aidé jusqu'à présent non plus. De mémoire ou quelque chose? Idk.

Le nouveau comportement semble avoir commencé vers le réveillon du Nouvel An (pas sûr car je n'utilisais pas le complément depuis quelques semaines), et il démarré pendant l'installation du complément, c'est-à-dire que rien dans le code n'a été modifié, recompilé ou réinstallé pour que cela se produise. Depuis, j'ai reconstruit le projet, pensant peut-être qu'un certificat avait expiré ou quelque chose du genre, mais l'erreur se produit toujours.

Il est peut-être intéressant de noter que je peux toujours accéder à d'autres propriétés de l'instance Application. Par exemple, cette ligne ne lève pas d'exception:

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    try
    {
        var x = Globals.ThisAddIn.Application.ActiveDocument;
    }
    catch  (Exception ex)
    {
        ;
    }
}

Mais ensuite, lorsque je parcourt la collection Documents avec foreach code >, il saute juste la boucle comme si le nombre était nul.

La seule chose à laquelle je peux penser est qu'une mise à jour d'Office (365) a cassé quelque chose lié à VSTO. Mais par où commencer le débogage?


D'accord, j'ai donc essayé de créer un nouveau complément Word VSTO, en ne modifiant aucune des propriétés par défaut du projet, mais en ajoutant un seul ruban avec un seul bouton et la méthode suivante:

int numDocuments = Globals.ThisAddIn.Application.Documents.Count;

Il lève exactement la même exception lors de l'obtention de la propriété ActiveDocument. J'ai cependant remarqué qu'il y avait deux autres exceptions levées lors du chargement du complément, et elles sont également levées lors du chargement du complément d'origine (qui fonctionnait bien):

Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;


6 commentaires

Alors, Office 365 ... Et la version de Windows, juste dans un souci de minutie? Les mises à jour récentes de Windows 10 (derniers mois = récentes) ont eu des effets négatifs sur Interop, bien que personnellement je ne les ai pas vécus ...


Windows 10 Pro version 1809, qui, je crois, est la plus récente. J'ai déjà essayé les six versions les plus récentes d'Office 365, via la méthode de restauration fastidieuse, et également en les supprimant complètement ainsi que tous les paramètres et en les réinstallant, mais l'erreur persiste. Alors peut-être est-ce lié à une mise à jour Windows. Je suppose que je vais essayer de revenir en arrière, une fois qu'Office est de nouveau opérationnel avec tous les paramètres. Grr.


Conseil: si vous pensez qu'Office essaie une RÉPARATION, ne supprimez pas et ne réinstallez pas. REPAIR met à jour / corrige les paramètres du registre, pas la réinstallation.


L'autre chose à vérifier est de savoir si le ou les documents ouverts dans l'application Word sont "en bac à sable" - dans une fenêtre protégée. Ce n'est pas quelque chose qui devrait simplement se produire maintenant, car il a été introduit il y a plus de cinq ans, mais j'ai pensé que je ferais mieux de le mentionner ...


Merci pour les suggestions, mais j'ai déjà essayé de réparer. Et bien que je pense que le sandboxing peut avoir quelque chose à voir avec cela, il y a certainement un document présent dans la collection Documents, et ce n'est certainement pas une vue protégée ou un mode lecture seule ou un autre. Je crois également que l'exception lancée serait différente si c'était la cause.


Merci de nous en informer. FWIW J'ai voté pour la fermeture comme "plus reproductible" ...


4 Réponses :


0
votes

D'après mon expérience: lorsque je fermais le document actif à ce moment-là, je rafraîchissais le menu du ruban en fonction du document actif. Si le document de clôture était le dernier document, je ne pouvais lire aucune propriété de

Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;

et j'étais face au même problème que vous.

chaque fois que je ferme un document que je vérifie

if(!LastActiveDocument){
// then only read any property of Active document
}

Et quand je rafraîchis le menu Ribbion, je vérifie

XXX


1 commentaires

Je comprends cela, et le complément prend soin de vérifier qu'il y a au moins un document présent, en particulier à cause de la vue protégée et autres. Mais si j'ajoute int y = Globals.ThisAddIn.Application.Documents.Count; à l'exemple minimal ci-dessus, il y a clairement un document là (y = 1 lors de l'exécution du complément avec un nouveau, vide document, par exemple)



1
votes

Eh bien, revenir à la version précédente de Windows 10 (1803 dans mon cas, apparemment) a résolu le problème, et je ne peux pas le reproduire pour le moment, je vais donc marquer cela comme résolu pour le moment.

Bien que je n'ai toujours aucune idée de ce qu'était exactement l'accord, j'ai au moins appris dans mes recherches que cliquer sur le bouton "Vérifier les mises à jour" dans Windows 10 fait instantanément de vous un testeur bêta pour Microsoft . Comme dans, ils vous mettent délibérément dans le train de mise à jour instable, sans aucun préavis, et encore moins un avertissement indiquant que vous êtes sur le point d'installer des mises à jour qui ils ne considèrent pas encore comme prêtes pour la publication. < / p>

Quoi qu'il en soit, j'espère qu'ils ont obtenu de bonnes données de télémétrie grâce à mes nombreuses heures d'essayer tout ce à quoi je pouvais penser, de sorte que le problème soit peut-être résolu au moment où la mise à jour est forcée sur moi. Sinon, je suppose que je reviendrai pour poser à nouveau la même question. Au moins, je saurai par où commencer à chercher la cause.


0 commentaires

4
votes

Le problème semble être déclenché par la mise à jour de Windows 10 octobre 2018 (ou novembre). Les clients concernés disposaient de paramètres régionaux Windows spéciaux: Exemple: "Anglais (Suisse)".

Solution:
Modifiez le format des paramètres régionaux de Windows en "Anglais (Royaume-Uni)" ou "Anglais (États-Unis)"

L'éditeur VBA ne fonctionnait plus correctement pour les clients concernés (sans les compléments installés). L'erreur «Word a rencontré un problème» (Visual Basic Error 5097) s'est produite directement lors de l'ouverture. La même erreur qui se produit en C # pour Application.ActiveDocument


0 commentaires

0
votes

Microsoft a résolu le problème
Microsoft a publié une mise à jour Office pour résoudre ce problème.
Avec Office Version 1902 (Build 11328.20158), le problème est résolu de mon côté.


0 commentaires