Frage

Ich habe einen freigegebenen Addin für Excel mit Extensibility IDTExtensibility2 Schnittstelle in Visual Studio 2008 entwickelt.

Es ist ziemlich einfach, in der Funktionalität. Wenn eine Arbeitsmappe geöffnet wird er in einer Liste der geöffneten Arbeitsmappe gespeichert wird, wenn es die Addin geschlossen ist, wird eine neue Textdatei erstellen dann in die Datei eine XML schreiben, dann wird diese Datei von einem anderen Prozess gelesen, die dann die XML deserialisiert wird .

Das Addin arbeitet unter normalen Operationen - also wenn der Benutzer öffnet und schließt eine Datei dann das Addin tut, was es soll, wenn sie Excel mit geöffneter Arbeitsmappe beenden dann tut es das, was es sein sollte

.

Das Problem ist, wenn der Benutzer Excel geöffnet mit geöffneten Arbeitsmappe und macht ein Log-Off. Die beiden Methoden. OnDisconnection und OnBeginShutdown erscheinen nicht aufgerufen, werden

habe ich zwei Dinge zu testen diese:

  1. habe ich ein Textwritertracelistener, die in eine Protokolldatei geschrieben, wenn diese beiden Methoden genannt wurden. Wenn Excel beenden normalerweise werden sie treffen und Informationen werden in der Protokolldatei protokolliert, aber wenn sich ein Benutzer abmeldet es nichts in der Protokolldatei ist.

  2. Innerhalb dieser beiden Methoden File.CreateText (Dateiname) habe ich eine leere Datei. Beim Beenden von Excel normalerweise diese Dateien erstellt werden, aber noch einmal, wenn Excel durch eine geschlossen ist, Log-Off diese Dateien nicht erstellt werden.

Hat jemand irgendwelche Ideen, wie ich dieses Problem umgehen kann? Ich muss zu erfassen, wenn Excel geschlossen wird, wenn der Benutzer sich ihre Maschine anmeldet ...

War es hilfreich?

Lösung

Die Lösung war am Ende in Microsoft.Win32.SystemEvents.SessionEnding einzuhaken und, wenn dieses Ereignis-System gefeuert wurde, manuell die OnBeginShutdown Methode aufrufen.

Andere Tipps

Diese verwendet, um eine Methode zu verursachen ~ des Objekts ~ fehlgeschlagen Fehler in VB6 Tagen.

Versuchen Sie Workbookbefore oder potentiell ProtectedViewWindowBeforeClose.

Ein Problem, das Sie mit ihnen haben kann, wenn ich mich richtig erinnere, ist, dass Sie nicht Erfassung kann, wenn, wenn die Veranstaltung abgesagt, so dass, wenn Sie diese verwenden, um aufzuräumen, ich glaube, Sie müssen auch einige Arbeit in einer der activate oder offene Veranstaltungen, so dass Ihre Addin nutzbar sein wird, wenn der Benutzer den Schließvorgang abgebrochen ....

Hope dies Sinn macht.

Ich hatte das gleiche Problem mit meinem Outlook 2010 Addin. Es kann etwas sein, mit der Tatsache zu tun, dass Outlook 2010 nicht Signal-Add-In, dass es wird heruntergefahren.

Insbesondere Outlook [2010] nicht mehr ruft die OnBeginShutdown und OnDisconnection Methoden der IDTExtensibility2 Schnittstelle beim schnellen Herunterfahren.

Auf ähnliche Weise ein Outlook-Add-In geschrieben mit Microsoft Visual Studio Tools für Office nicht mehr ruft die ThisAddin_Shutdown Methode, wenn Outlook heruntergefahren wird.

Wenn Sie immer noch Ihre Addin benachrichtigt werden möchten, wenn Outlook 2010 wird heruntergefahren (wie ich), müssen Sie zwischenzuspeichern auf den Application Veranstaltung ApplicationEvents_Event_Quit, Code wie bei mir unten (Ihr Shutdown-Code soll nach wie vor sowohl in der Flucht OnDisconnection und OnBeginShutdown Methoden in jedem Fall):

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
    // As this is an Outlook-only extension, we know the application object will be an Outlook application
    _applicationObject = (Microsoft.Office.Interop.Outlook.Application)application;

    // Make sure we're notified when Outlook 2010 is shutting down
    ((Microsoft.Office.Interop.Outlook.ApplicationClass)_applicationObject).ApplicationEvents_Event_Quit += new ApplicationEvents_QuitEventHandler(Connect_ApplicationEvents_Event_Quit);
}

private void Connect_ApplicationEvents_Event_Quit()
{
    Array emptyCustomArray = new object[] { };
    OnBeginShutdown(ref emptyCustomArray);
}

public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
{
    addinShutdown();
}

public void OnBeginShutdown(ref System.Array custom)
{
    addinShutdown();
}

private void addinShutdown()
{
    // Code to run when addin is being unloaded, or Outlook is shutting down, goes here...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top