Ich habe Code, der perfekt auf mehreren Maschinen funktioniert (Entwicklung, QA, UAT). Leider, bei der Produktion bekomme ich "Ein generischer Fehler aufgetreten in GDI +" auf der bmp.Save(ms, ImageFormat.Png);
Als Ergebnis nehme ich an, dass Sie nicht in der Lage sein werden, das Problem zu reproduzieren, aber vielleicht kann jemand meinen Fehler erkennen. p>
Ein paar Anmerkungen, ich habe viel nach gemeinsamen Lösungen gesucht, beachten Sie, dass dies in MemoryStream
gespeichert wird, so dass die Dateiberechtigungs-Probleme die meisten Leute vorschlagen, nicht zutreffen, noch ist das "bmp während des Öffnens gesperrt" Lösung, weil ich wieder woanders schreibe. Schließlich ist es nicht, weil png einen suchbaren Stream benötigt, weil MemoryStream
suchbar ist.
Beachten Sie, wenn ich es in ImageFormat.Jpeg
ändere, funktioniert es gut. Ich habe nur ein Problem mit PNGs. Ich habe erwähnt, dass der Registrierungsschlüssel HKEY_CLASSES_ROOT\CLSID\{FAE3D380-FEA4-4623-8C75-C6B61110B681}
möglicherweise aufgrund von Berechtigungen das Problem darstellt. Als Ergebnis habe ich den Schlüssel so eingestellt, dass Everyone
Lesezugriff auf diesen Schlüssel hat, keine Änderung.
Hier ist der vollständige Stack-Trace:
[ExternalException (0 x 80004005): ein allgemeiner Fehler trat bei GDI + auf.]
System.Drawing.Image.Save (Stream-Stream, ImageCodecInfo-Encoder, EncoderParameters encoderParams) +616457
WP.Tools.Img.GenerateImage (Zeichenfolge Text) +383
Hinweis: meine Frage zählt bereits die Lösungen in dem vorgeschlagenen Duplikat. Keine sind das Problem. Wenn es so wäre, würde es auch für JPEG fehlschlagen.
Der .NET-Referenzquellcode hier , in der Save-to-Stream-Fall, erhält einen Statuswert von einem Aufruf an die native Methode GdipSaveImageToStream:
%Vor%Dieser Statuswert ist der einzige API-Rückgabewert, der zum Auslösen einer Ausnahme von dieser Methode verwendet wird. Wenn wir uns die StatusException-Funktion näher ansehen, die basierend auf dem Statuscode entscheidet, welche Art von Ausnahme ausgelöst werden soll, finden wir nur einen einzigen möglichen Statuswert, der zu der externen Exception führt (aus Gdiplus.cs, Zeile 3167):
%Vor%0x80004005 ist "unspezifizierter Fehler" und der SR.GdiplusGenericError ist der Text "Ein generischer Fehler ist in GDI + aufgetreten." du hast. Dies schließt mehrere andere Möglichkeiten aus, die wir vermuten könnten (was zu verschiedenen Ausnahmen führen würde), nämlich:
Die native Methode befindet sich in gdiplus.dll . Kurz gesagt, lassen Sie Ihren Produktionsserver reparieren, reparieren Sie .NET Framework. Weitere Details: