Die Silverlight Out-of-Browser-Anwendung wird nicht mit der MainWindow.Close-Methode geschlossen

8

Ich habe ein Silverlight 5.1.10411.0 Out-of-Browser Anwendung, die NICHT vertrauenswürdig ist und ich versuche, die Anwendung zu schließen mit dem App.Current.MainWindow.Close Methode. Laut der Dokumentation kann ich diesen Mechanismus nur verwenden, wenn eine dieser Bedingungen zutrifft:

  • Es ist eine vertrauenswürdige Anwendung (trifft nicht auf meine Anwendung zu)
  • Bevor das Application.Startup-Ereignis abgeschlossen wurde (gilt nicht für meine Anwendung)
  • Als Reaktion auf eine vom Benutzer initiierte Aktion, z. B. in einem Click-Ereignishandler (Dies ist es, was ich versuche zu arbeiten)

In meinen Versuchen, dies zum Laufen zu bringen, habe ich die Dinge extrem einfach gehalten und rufe die Methode direkt in einem Code hinter dem Button-Click-Event-Handler auf, wie unten gezeigt, aber es hat keine Wirkung.

%Vor%

Wenn ich den Debugger anhefte und "Pause, wenn eine Ausnahme ausgelöst wird" setze, kann ich die Ausnahme sehen

  

SecurityException: Zugriff auf die Eigenschaft oder den Methodenaufruf ist nicht möglich   zulässig, es sei denn, die Anwendung verfügt über erweiterte Berechtigungen oder den Code   wurde durch eine vom Benutzer initiierte Aktion aufgerufen.

Irgendwelche Ideen, warum mein Code nicht als vom Benutzer initiierte Aktion betrachtet wird?

Ich habe versucht, den Event-Handler sowohl in XAML als auch im Code-Behind (nicht gleichzeitig) anzuhängen

%Vor%

oder

%Vor%

ohne Erfolg. Ich habe die vom Benutzer initiierte Ereignisse -Dokumentation sehr gelesen sorgfältig und kann nicht sehen, warum mein Code nicht als vom Benutzer initiiert gilt. Ich habe das sowohl im Debug- als auch im Release-Modus versucht und auch, wenn kein Debugger ohne Erfolg angehängt ist. Wenn ich die Einstellung "Erfordern erhöhte Sicherheit bei Ausführung außerhalb des Browsers" auf "wahr" ändere, funktioniert der Abschlussaufruf wie erwartet.

Ich habe meine Anwendungsanforderungen neu definiert , um dieses Problem zu umgehen, aber ich möchte wirklich verstehen, was ich falsch mache ;-)

Update : SonOfPirate zeigt an, dass die Dokumentation für diese Methode nicht korrekt ist aber ich bin nicht überzeugt. Unter Verwendung des Reflexionstools dotPeek ist die Methode, die die Ausnahme auslöst,

%Vor%

Ich finde das ein bisschen verwirrend zu lesen, also habe ich den Code und die geschriebenen Einheitentests dafür verspottet, wie es in gist und wie Sie aus den Ergebnissen sehen können, sollte ich in der Lage sein, von einer nicht vertrauenswürdigen Anwendung aus zu schließen, vorausgesetzt, es wurde vom Benutzer initiiert.

Die Sicherheitsausnahmebedingungsnachricht

  

Der Zugriff auf den Eigenschaften- oder Methodenaufruf ist nicht zulässig, es sei denn, die Anwendung verfügt über erweiterte Berechtigungen oder der Code wurde über eine vom Benutzer initiierte Aktion aufgerufen.

gibt auch an, dass es möglich sein sollte, also bin ich zurück zu der Frage - warum wird dieser Code nicht als vom Benutzer initiiert betrachtet?

    
Martin Hollingsworth 29.06.2012, 02:47
quelle

2 Antworten

3

Der Fehler ist im ersten Absatz, wenn Sie sagen, dass Sie "diesen Mechanismus nur verwenden können, wenn eine dieser Bedingungen zutrifft:" Lesen Sie die MS-Dokumentation ein wenig näher und Sie werden sehen, dass sie nicht sagen " einer dieser Bedingungen. Hier ist der genaue Text von der MS-Referenzseite für die Schließen Methode :

  

Sie können diese Methode nur in den folgenden Fällen aufrufen:

     
  • Als Reaktion auf eine vom Benutzer initiierte Aktion, z. B. in einem Click-Ereignishandler.
  •   
  • Bevor das Application.Startup-Ereignis abgeschlossen wurde (dh in einer IApplicationService.StartService-Methode eine IApplicationLifetimeAware.Starting-Instanz)   Methode oder ein Startup-Ereignishandler).
  •   
  • In einer vertrauenswürdigen Anwendung.
  •   

Wie Sie gesehen haben, müssen Sie erhöhte Vertrauenswürdigkeit aktivieren.

AKTUALISIEREN

Ich räume ein, dass die von Microsoft verwendete Formulierung bei beiden der ersten beiden Fälle, die in Kombination mit der dritten benötigt werden, ein wenig irreführend ist. Vielleicht wäre es klarer, wenn man genauer formuliert:

  

Sie können diese Methode nur in einer vertrauenswürdigen Anwendung in einem der folgenden Fälle aufrufen:

     
  • Als Reaktion auf eine vom Benutzer initiierte Aktion, z. B. in einem Click-Ereignishandler.
  •   
  • Bevor das Application.Startup-Ereignis abgeschlossen wurde (dh in einem IApplicationService.StartService   Methode, eine IApplicationLifetimeAware.Starting-Methode oder ein Startup-Ereignishandler).
  •   
    
SonOfPirate 04.07.2012 13:24
quelle
0

So erhöhen Sie die Berechtigung für das webBrowser-Steuerelement in silverlight:

1- Ссылка Thema: So aktivieren Sie vertrauenswürdige Anwendungen im Browser

2- Ссылка Thema: XAP-Silverlight digital signieren

3- Ссылка Thema: Hinzufügen der erforderlichen Registrierungseinstellung       Ihre XAP-Datei signieren        Bereitstellen des Zertifikats

Stellen Sie sicher, dass das signierte Zertifikat im vertrauenswürdigen Herausgeber des lokalen Computers und des aktuellen Benutzers bereitgestellt wird.

    
msbeigi 10.02.2014 06:05
quelle

Tags und Links