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:
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?
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).
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.
Tags und Links silverlight silverlight-5.0