Entschärfung: CspParameters.ParentWindowHandle erwartet ein HWND

Die ParentWindowHandle-Eigenschaft, die in .NET Framework 2.0 eingeführt wurde, ermöglicht einer Anwendung die Registrierung eines Handlewerts für das übergeordnete Fenster, sodass jedes Benutzeroberflächenelement, das auf den Schlüssel zugreifen muss (wie etwa eine PIN-Eingabeaufforderung oder ein Zustimmungsdialogfeld), als untergeordnetes modales Fenster des angegebenen Fensters geöffnet wird. Von Anwendungen mit der Zielplattform .NET Framework 4.7 an kann dieser Eigenschaft ein Fensterhandle (HWND) zugewiesen werden.

In Versionen von .NET Framework bis einschließlich .NET Framework 4.6.2 wurde als zugewiesener Wert der ParentWindowHandle-Eigenschaft ein IntPtr-Objekt erwartet, das den Speicherort im Arbeitsspeicher angibt, an dem sich der HWND-Wert befindet. In Windows 7 und früheren Versionen des Windows-Betriebssystems blieb das Festlegen der Eigenschaft auf form.Handle ohne Auswirkung, in Windows 8 und späteren Versionen führt es jedoch zu einem System.Security.Cryptography mit der Nachricht „Der Parameter ist falsch“.

Bei Apps mit .NET Framework 4.7 und höher als Zielplattform kann eine Windows Forms-Anwendung die ParentWindowHandle-Eigenschaft mit Code wie dem folgenden festlegen:

cspParameters.ParentWindowHandle = form.Handle;

Auswirkungen

Für Anwendungen für die Zielplattform .NET Framework 4.7 oder höher, die eine übergeordnete Fensterbeziehung registrieren möchten, wird vorzugsweise die vereinfachte Form verwendet:

cspParameters.ParentWindowHandle = form.Handle;

Problemumgehung

Entwickler, die bestimmt hatten, dass der richtige Wert die Adresse des Speicherorts im Arbeitsspeicher war, der den form.Handle-Wert enthielt, können sich gegen dieses geänderte Verhalten entscheiden, indem sie den AppContext-Schalter Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle auf true festlegen:

  • Durch programmgesteuertes Festlegen von Kompatibilitätsoptionen für die AppContext-Instanz.

  • Durch Hinzufügen der folgenden Zeile zum Abschnitt <runtime> der app.config-Datei:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
    </runtime>
    

Benutzer, die sich umgekehrt für das neue Verhalten entscheiden, können für Anwendungen, die unter .NET Framework 4.7 ausgeführt werden, jedoch frühere Versionen von .NET Framework als Zielplattform haben, den AppContext-Schalter auf false festlegen.

Siehe auch

Änderungen der Neuzuweisungen in .NET Framework 4.7