peterleb
Goto Top

System.Windows.Forms.MessageBox

Hallo Mädels und Jungs,

in einem kleinen Script soll die Anweisung

[System.Windows.Forms.MessageBox]::Show($msg, 'PowerShell', 0)  

ausgeführt werden.
Dazu wird vorher
[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')  
abgearbeitet.
Seit kurzem kommt eine Fehlermeldung:
False  v4.0.30319     C:\Program Files\PowerShell\7\System.Windows.Forms.dll

Das ps1 Script wird mit
"C:\Program Files\PowerShell\7\pwsh.exe" "C:\Users\XXXXXX\AppData\Roaming\Lexware\FinanzManager\2024\DelReminder.ps1"  
aufgerufen.

Trotz Fehlermeldung erscheint die die MessageBox und nach <OK> wird das Programm sauber beendet.
Ich denke, die Sache tritt nach einem PS Update auf.

Wie löse ich das Problem?
Vielen Dank allen Mitdenkenden.
Groß
Peter

Content-Key: 92678358558

Url: https://administrator.de/contentid/92678358558

Printed on: May 19, 2024 at 16:05 o'clock

Member: mbehrens
mbehrens May 07, 2024 at 16:37:20 (UTC)
Goto Top
Zitat von @PeterleB:

[System.Windows.Forms.MessageBox]::Show($msg, 'PowerShell', 0)  

Was ist mit dem DialogResult?

Dazu wird vorher
[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')  

Macht man nicht eher ein
Add-Type -AssemblyName System.Windows.Forms
Member: PeterleB
PeterleB May 07, 2024 at 16:49:28 (UTC)
Goto Top
Die Box meldet, ob die Datei vorhanden war und gegebenenfalls gelöscht wurde.
OK beendet das Programm.

Den Add-Type Befehl werde probieren.

Gruß
Peter
Member: hempel
Solution hempel May 07, 2024 updated at 18:53:57 (UTC)
Goto Top
Hi.
Das ist kein Problem sondern ganz normal!
Zitat von @PeterleB:

Seit kurzem kommt eine Fehlermeldung:
False  v4.0.30319     C:\Program Files\PowerShell\7\System.Windows.Forms.dll
> 
Das ist keine Fehlermeldung!
Per Default gibt die Methode LoadPartitialWithName immer das Assembly zurück sofern es gefunden wurde, was es hier auch ganz normal tut.
Siehe dazu
https://learn.microsoft.com/de-de/dotnet/api/system.reflection.assembly. ...

Du hast nur vergessen die Ausgabe zu unterdrücken.
Willst du die Ausgabe unterdrücken machst du ein [void] davor oder pipest das Ergebnis via out-null ins Nirvana.
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')  
# oder 
[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | out-null  

Außerdem ist die Methode LoadPartitialWithName mittlerweile als deprecated/veraltet markiert
Steht ebenfalls hier:
https://learn.microsoft.com/de-de/dotnet/api/system.reflection.assembly. ...

Ersatz dafür ist Load()

[void][System.Reflection.Assembly]::Load('System.Windows.Forms')  

Sie alle machen aber im Endeffekt das gleiche wie das präferierte CMDLet Add-Type mit dem Parameter -AssemblyName

Add-Type -AssemblyName System.Windows.Forms
Das gab es aber erst seit der PowerShell 3, deswegen haben diverse Skripte noch die .NET Methode drin stehen die auch schon unter der PS 2.0 funktionierte.

Hoffe das klärt dein Missverständnis damit auf. 😉

H.
Member: PeterleB
PeterleB May 08, 2024 at 04:51:26 (UTC)
Goto Top
Vielen lieben Dank für die hilfreiche Erklärung.

Gruß
Peter