Ich habe einige IO-Code, der einen Stream innerhalb eines try..catch liest. Es fängt IOException und ruft System. Runtime. InteropServices. Marshal. GetHRForException () innerhalb der catch, in einem Versuch, verschiedene Aktionen auf der Grundlage der HResult nehmen. So etwas wie dieses: Aber diesen Code in ASP. NET mit trustmedium ausführen, bekomme ich diese Ausnahme: Ein paar Fragen: Ich denke, die Ausnahme ist aufgetreten, weil GetHRForException ruft in nicht verwalteten Code, der nicht in Medium Vertrauen erlaubt ist. Korrigieren Diese Ausnahme wird geworfen, nicht zum Zeitpunkt der Ausführung von GetHRForException, aber zum Zeitpunkt der Methode wird JITed - Correct (Der stacktrace zeigt meine Methode, aber ich bin 99 sicher, dass eine IO-Ausnahme nicht aufgetreten ist) Wenn ja, Gibt es eine Möglichkeit für mich, das Verhalten in einer partiellen Vertrauensumgebung variieren, so dass ich nicht rufen Sie die GetHRForException (nicht verwalteten Code), wo es nicht erlaubt ist Mit anderen Worten, wie kann ich dem JIT erlauben, zum Zeitpunkt der Kompilierung erfolgreich zu sein, während auch Auswertung zur Laufzeit, ob der Code GetHRForException () aufrufen sollte So etwas wie dies: Ich denke, es gibt einen Laufzeitmechanismus für den Test, wenn Berechtigungen verfügbar sind, aber havent in der Lage, es zu finden. BEARBEITEN. Ist dieser Blog-Artikel die Antwort ShawnFa von Microsoft sagt, dass Sie nicht versuchen können. Catch (SecurityException) um eine Methode, die durch einen LinkDemand geschützt ist. Wenn MethodA () MethodB () aufruft und MethodB () mit LinkDemand für vollständige Vertrauenswürdigkeit markiert wird, wird der LinkDemand überprüft, wobei MethodA Jited ist. Deshalb, um die SecurityException zu vermeiden, muss ich Marshal. GetHRForException in eine separate Methode extrahieren. Ist das korrekt Auf meinen Code angewendet, kann MethodA () der Code sein, der Read aufruft und dann im catch versucht, GetHRForException () aufzurufen. GetHRForException ist MethodB (). Der LinkDemand wird ausgewertet, wenn MethodA () JITd ist. (Dieser LinkDemand schlägt in meinem Medium vertrauen ASP. NET-Szenario). Wenn ich die GetHRForException in eine neue Methode MethodC () verschieben und MethodC () nur bedingt aufrufen, nachdem eine imperative permission. Demand () erfolgreich ist, sollte ich theoretisch die SecurityException an der JIT-Zeit vermeiden können, da MethodC () sein wird JITd nur, nachdem die permission. Demain () erfolgreich ist. Gesendet am Jul 12 09 am 14:20 Die erforderliche Methode ist SecurityPermission. IsUnrestricted (). Es gibt eine true oder false, die angibt, ob die Berechtigung erlaubt ist oder nicht. Es erfordert keine Berechtigung, ebenso wie SecurityPermission. Demand (). Ich benutze IsUnresticted mit SecurityPermissionFlag. UnmanagedCode zu sehen, wenn die Assembly darf nicht verwalteten Code aufrufen, und rufen Sie den nicht verwalteten Code nur, wenn erlaubt. Es gibt einen zusätzlichen Twist. Der JIT-Compiler prüft beim Kompilieren einer Methode nach CodeAccessPermission LinkDemands auf jede Methode, die als die zu kompilierende Methode bezeichnet wird. Marshal. GetHRForException () ist mit einem LinkDemand markiert. Daher wird meine Methode, die Marshal. GetHRForException () aufruft, eine uncatchable SecurityException zum Zeitpunkt der JIT-Kompilierung werfen, wenn in einer beschränkten Umgebung wie ASP. NET mit mittlerer Vertrauenswürdigkeit ausgeführt wird. Daher muss man nicht JIT die Methode, die Marshal. GetHRForException () in diesem Fall, was bedeutet, dass ich ausbrechen müssen, Marshal. GetHRForException () in eine separate Methode in meinem Code, der aufgerufen wird (und somit JITted) nur dann, wenn UnmanagedCode ist uneingeschränkt. Heres einige Beispiel-Code: beantwortet Jul 20 09 at 17:56 Ja - mittlere Vertrauen wird nicht zulassen, Anrufe in nicht verwalteten Code. Die einzige Vertrauensstufe, die es zulässt, ist volles Vertrauen. Es hängt davon ab, ob. CAS-Anforderungen können zur Laufzeit stattfinden, aber die Hosting-Umgebung kann auch auf eine Wanderung gehen und suchen Dinge, die sie nicht tun kann. Sie können testen, um festzustellen, ob Sie einen nicht verwalteten Code anrufen können, indem Sie eine CAS-Anfrage mit einer Instanz von SecurityPermission verwenden. Der Code, um eine CAS-Nachfrage sieht aus wie dies beantwortet. Dies deckt Teil b von Q3 ab. Aber was ist mit Teil a Wie bekomme ich die JIT-Kompilierung zum Erfolg Kann ich meine Methode mit einem Sicherheitsattribut oder markieren. Denken Sie daran, meine Theorie ist, dass der SecurityPermission-Fehler nicht zur Laufzeit geschieht, es geschieht während JIT - und ich denke, Sie bestätigt, dass dies möglich ist. Also die Frage ist, wie schreibe ich den Code, damit die JIT zu kompilieren. Ndash Cheeso Es sollte zur Laufzeit geschehen, sonst würde die Montage wouldn39t sogar laden - und dafür muss die Assembly muss als die Erlaubnis erforderlich markiert werden. Selbst dann that39s wohl ein Laufzeit-Check, wie es bei Montage Belastung, die zur Laufzeit sein könnte passieren wird. Ndash blowdart Unterschiedliche Art der Überprüfung, Link-Anforderungen sind Attribute auf eine Methode, und werden tatsächlich bei JIT-Zeit überprüft. It39s ziemlich viel von dem Rahmen selbst verwendet und es ist selten, es außerhalb der CLR-Quelle zu sehen. Was ich demonstrieren ist eine zwingende Forderung, nicht eine deklarative wie eine SecurityPermission (SecurityAction. LinkDemand, uneingeschränkt true) ndash blowdart So, sowohl ENOINTERFACE als auch EPOINTER HRESULT werden einem InvalidCast zugeordnet Ausnahme von ThrowExceptionForHR. Sobald eine InvalidCast-Ausnahme ausgelöst wird, wird die gleiche HRESULT von GetHRForException (they8217re die gleiche Ausnahme zu diesem Zeitpunkt) zurückgegeben werden. Der Grund, dass 0x8004002 beide Male angezeigt wird, ist, dass das Fehlerobjekt nicht zwischen den beiden try / catch-Blöcken zurückgesetzt wird. Bevor der erste try / catch das dem logischen Thread zugeordnete Fehlerobjekt leer ist, wird nach dem try / catch der Fehler object8217s HRESULT auf 0x8004002 gesetzt. Jetzt wird der zweite try / catch-Block ausgeführt und die GetErrorInfo () wird ausgeführt, um den Wert COMException. HRESULT auf den Wert aus dem Fehlerobjekt (das bereits auf 0x8004002 festgelegt ist) zu setzen, so dass der COMException. HRESULT Wert auf 0x8004002 festgelegt ist. Lassen Sie mich sehen, wenn ich kann kommen mit einem example8230 Nun, konnte ich zeigen, warum dies geschieht (siehe den untenstehenden Code). Ich fügte einen Aufruf ein, um eine neue Instanz der Excel. ApplicationClass auf dem Excel-COM-Server zu erstellen. Jeglicher Cross-Apartment-Aufruf, der einen Proxy-Stub oder einen COM-Aufruf in einer Wohnung verwendet, die die COM-Meldungsschleife (STA) verwendet, löscht das Fehlerinformationsobjekt. So löst der Aufruf des Excel-COM-Objekts zwischen den gefangenen Ausnahmen das Fehlerinformationsobjekt: class Class1 const int ENOINTERFACE unchecked (int int 0x80004002) const int EPOINTER unchecked (int int 0x80004003) private Excel. Application ExcelApplication null Sehr gut Beobachtungen, alle Normalerweise wird ENOINTERFACE auf InvalidCastException abgebildet und EPOINTER auf NullReferenceException abgebildet. Aber wie Fernando hervorhob, sind beide Ausnahmen, die in diesem Beispiel geworfen werden, InvalidCastException. Das erklärt, warum GetHRForException in beiden Fällen ENOINTERFACE zurückgibt, aber warum erhalten wir eine InvalidCastException zweimal Die ThrowExceptionForHR-Methode wirft eine Ausnahme auf, deren Typ dem HRESULT-Wert entspricht (oder einer COMException, die den HRESULT enthält, wenn der Eingang HRESULT isn8217t in der CLR8217s Mapping-Tabelle ist) . Aber es tut mehr als nur das: es ruft die Win32 GetErrorInfo API zu versuchen, ein Fehler-Objekt auf dem aktuellen Thread abzurufen. Er verwendet diese Informationen, um der Ausnahme eine benutzerdefinierte Fehlermeldung, Quelle und so weiter zu geben. ThrowExceptionForHR hat auch eine Überladung mit einem zweiten System. IntPtr-Parameter, der einen Zeiger auf eine IErrorInfo-Schnittstelle darstellt, sodass Sie diese Informationen direkt übergeben können. Übergeben von IntPtr. Zero bedeutet, dass die API wie die Ein-Parameter-Überladung handeln soll (und GetErrorInfo aufrufen), und das Übergeben von -1 deaktiviert das Extra-Info-Retrieval insgesamt. Die GetHRForException-Methode ruft den HRESULT-Wert für jede verwaltete Ausnahme ab. Hierbei handelt es sich um den Wert der von exception8217s geschützten quotHResultquot-Eigenschaft, die Sie normalerweise direkt aufrufen können. Aber diese Methode hat einen Nebeneffekt: es ruft die Win32 SetErrorInfo API, übergeben die CCW für Ausnahme (die IErrorInfo entsprechend implementiert). Dies macht es einfach, das Verhalten von marshaler8217s nachzuahmen, wenn man manuell eine Ausnahme als HRESULT und IErrorInfo an COM stellt. In diesem Beispiel ruft der erste Aufruf von GetHRForException die CLR auf, SetErrorInfo mit dem umbrochenen InvalidCastException-Objekt aufzurufen. Aus diesem Grund nimmt der zweite Aufruf von ThrowExceptionForHR diese Informationen auf, wenn er GetErrorInfo aufruft, wie Phil darauf hinwies. Der Grund dafür ist die Art des geworfenen Ausnahme 8211 trotz der Tatsache beeinflusst, dass IErrorInfo doesn8217t einen Mechanismus zum Abrufen eines HRESULT 8211 ist, dass die CLR erkennen kann, wenn das Fehlerobjekt aus SetErrorInfo abgerufen als verwaltete Ausnahme entstanden und genau das ursprüngliche Ausnahme wiederverwenden. All dies bedeutet, dass die ausgelöste Ausnahme immer eine InvalidCastException ist, unabhängig davon, was HRESULT in die ThrowExceptionForHR-Methode zum zweiten Mal (solange it8217s ein Fehler HRESULT) übergeben wird. Um das Verhalten zu bekommen you8217d normalerweise erwarten, können Sie die Überlastung von ThrowExceptionForHR verwenden, die IErrorInfo ignoriert: using System using System. Runtime. InteropServices public class Quiz const int ENOINTERFACE nicht markiert ((int) 0x80004002) const int EPOINTER nicht markiert ((int) 0x80004003) public static void Main () versuchen Marshal. ThrowExceptionForHR (ENOINTERFACE) catch (Exception ex) Console. WriteLine (quot0x quot, Marshal. GetHRForException (ex)) Dieser neue Code druckt: Phil fragte, warum Marshal. GetLastWin32Error immer 0 zurückgegeben, egal wo er Eingefügt. That8217s, da GetLastError / SetLastError ein separater Mechanismus von GetErrorInfo / SetErrorInfo ist. Der ehemalige Mechanismus ist hier nie beteiligt. Und, ja, verwaltetem Code sollte nie GetLastError direkt aufrufen. Siehe: blogs. gotdotnet / anathan / PermaLink. aspx / 6d021f27-72c8-4420-b6ad-1c5f0690bde8 Es tut mir leid, dass mein Gast nicht mit dem Thema zusammenhängt. Ich möchte wissen, dass wie kann ich sammeln Informationen von einer Seite zum Beispiel erhalten Sie den HTML-Code einer speziellen Seite in meinem ASP oder ASP. NET apllication und verwenden Sie es in meiner application. for exaple Ich bekomme den HTML-Code von quotanysite quot und Dann verwenden Sie diesen Code in meiner Seite durch die Programmierung. I8217ve gesehen genug Leute fragen, so dass ich dachte, ich sollte darüber in meinem Blog zu sprechen. Sie sehen seltsame erste Chance TypeLoadException geschieht in ihrer Anwendung, aber es doesn8217t scheinen nie verursachen kein Problem (app doesn8217t Absturz) und alles scheint noch zu funktionieren 8216fine8217. Dies scheint vor allem passieren, wenn Sie eine C8230 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 Auch wenn ich arbeiten auf. NET-Interop und WinRT in diesen Tagen, async / await ist immer noch das ein Thema, das mich verwirrt von der Zeit wird zu Zeit. It8217s ein großartiges Konzept logisch, aber schwer zu fassen, sobald Sie anfangen, darüber nachzudenken, wie der eigentliche Code Ablauf geht (und bricht die Hölle los, sobald Sie the8230 x2605 Debuggen starten x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 It8217s einfacher, dies in einem zu erklären, . Beispiel Angenommen Sie haben in Ihrer Mutter DLL eine Exportfunktion haben: void WINAPI MyFunction (comptrtltIMyInterfacegt ptr) und der DllImport wäre so etwas wie dieses: DllImport (quotmydll. dllquot) void MyFunction (IMyInterface ptr) Alles scheint perfekt gültig zu sein, außer dass es 7. Februar a8230 ist 2013 0 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 I8217m viele Menschen zu sehen, berichten, dass sie seltsame P / aufrufen Fragen sind zu sehen, wenn sie 2012 ihren Code VS bewegt Typischerweise haben sie P / ruft wie folgt aus: DllImport (quotWin32Project2.dllquot, PreserveSig wahr, CharSet CharSet. Unicode) statisch extern int MyPInvoke (out String ret) Wenn Sie einen nativen Debugger anhängen (oder aktivieren nativen Debugging), mit den richtigen Symbolen (public symbol8230 24. Januar 2013 2 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 Let8217s ersten Start bei einem kleinen Code-Schnipsel suchen: if (Marshal. GetHRForException (MyException) ESOMECOMERROR) DoSomething () Diese völlig in Ordnung aussieht, rechts Nicht wirklich. Es stellt sich heraus, diese API ist eigentlich schlecht benannt, und es tatsächlich mehr als nur Abrufen der HR aus dem Ausnahmeobjekt. Diese API könnten Sie falsch einige seltsame Probleme geben, 8230 18. Januar 2013 0 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 ich diesen Debug-Trick vor ein paar Tagen von einem Kollegen gelernt, wenn wir einen Fehler zusammen und ich debuggen Kann nicht warten, um es zu teilen. Konzeptionell ist es wirklich eine einfache Idee, aber es ist sehr hilfreich. Nehmen wir an, dass Sie einen Crash debuggen. Sie wissen, dass der Fehler wahrscheinlich in Funktion A but8230 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 Ich habe vor kurzem Samsung Focus, aber es funktioniert nicht von der Zune-Software anerkannt zu bekommen heißt es kein Gerät angeschlossen ist, auch wenn mein Telefon einen Ton klingeln tat Wenn es eine Verbindung zu meinem Computer und Zune-Software hat Pop-up. Verbringen Sie eine halbe Stunde auf der Suche nach Lösungen, und ich laufe in diesem Artikel: Microsoft / windowssphone / de-us / howto / wp7 / basics / the-zune-software-doesnt-erkennen-mein-phone. aspx Eins von Dezember 21, 2010 1 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 Was 0x8013XXXX ist Gelegentlich könnten Sie in mysteriöse HRESULTs laufen von. NET zurückgegeben, die mit 0x8013, zum Beispiel beginnt, 0x80131522. Leider funktioniert die Fehlersuche, die mit Visual Studio ausgeliefert wird, nicht wirklich an diesen merkwürdigen HRESULTs. Was sind sie Es stellt sich heraus, sie sind in der Tat, definiert durch. NET / CLR in den Header-Dateien. Alle diese Fehler / success8230 17. Dezember 2010 0 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605 x2605
Cleo Bay Honda Ressourcen Minivans in Killeen: 2016 Honda Odyssey vs 2016 Dodge Grand Caravan Heute in Cleo Bay Honda sprachen über Minivans in Killeen Wenn Sie sich hier, weil youre erkunden Sie Ihre Optionen für die perfekte Minivan, youve landeten auf der rechten Seite. Minivans sind ein klassisches Familienauto wegen ihres Renommees für höchste Sicherheitsbewertungen, unbestreitbaren Passagierraum und vielseitige Verwendbarkeit Heute verglichen das 2016 Honda Odyssey und die 2016 Dodge großartige Karawane, um zu sehen, wie jeder formen oben. Wenn die Sicherheit Ihre oberste Priorität beim Einkauf für ein neues Fahrzeug ist, sollte die 2016 Honda Odyssey Ihre 1 Wahl sein. Mit einem Standard-Kollisionswarnsystem, einem Lane-Abflug-Warnsystem (im EX-L / Touring / Elite) und den optionalen Parksensoren wird die Odyssey die meiste Sicherheit erledigen , Ist es nicht nur die Sicherheits-Features, die die Odyssey Top in Sicherheit zu machen, aber die Crash-Test-Bewertungen beweisen. Die O...
Comments
Post a Comment