Seite 6 von 12

Re: PB.Ex Mail (Windows)

Verfasst: 17.05.2019 20:40
von RSBasic
PB.Ex Mail 1.0.9.0 wurde veröffentlicht.

Changelog:
  • Geändert: @Output$: Wenn 0 übergeben wird, dann wird als Rückgabewert der jeweiligen Funktion die benötigte Länge für die Allokierung des Speichers zurückgegeben.

@HeX0R
Ah ok, danke für die Information.

Re: PB.Ex Mail (Windows)

Verfasst: 17.05.2019 21:30
von Bisonte
RSBasic hat geschrieben:PB.Ex Mail 1.0.9.0 wurde veröffentlicht.

Changelog:
  • Geändert: @Output$: Wenn 0 übergeben wird, dann wird als Rückgabewert der jeweiligen Funktion die benötigte Länge für die Allokierung des Speichers zurückgegeben.
Also verstehe ich das so dann richtig ?

Code: Alles auswählen

; Erst Grösse ermitteln
Length = MailDirectoryEntryNameEx(ID, #Null, @ErrorOutput$)
; Speicher reservieren
*Output = AllocateMemory(Length)
; Nochmal um den Puffer zu füllen
Result = MailDirectoryEntryNameEx(ID, *Output, @ErrorOutput$)

Re: PB.Ex Mail (Windows)

Verfasst: 17.05.2019 21:32
von RSBasic
Genau :allright:

Re: PB.Ex Mail (Windows)

Verfasst: 17.05.2019 22:02
von Nino
HeX0R hat geschrieben:Das ist dann eher eine Eigenart von Thunderbird, das brauchst Du so natürlich nicht zu unterstützen.
Ich muss jetzt nur noch herausfinden wieso der TB das so macht, früher hat er das definitiv nicht so gehandhabt.
Das diesbezügliche Standard-Verhalten von Thunderbird (aktuelle Version 60.6.1) hängt ab von der Einstellung unter
Extras > Einstellungen > Verfassen > Allgemein > Nachrichten weiterleiten

Man kann das aber auch für jede weitergeleitete Mail individuell wählen mittels
Nachricht > Weiterleiten als

Re: PB.Ex Mail (Windows)

Verfasst: 24.06.2019 21:08
von HeX0R
Ich habe noch keinen Rechner gefunden, wo kein .NET 4.5 installiert war, daher mal die Frage vorab:
Wie genau wird sich das denn verhalten, wenn der User es nicht installiert hat?
Habe mir ne Erkennungsroutine für .NET 4.5 gebastelt, jetzt frage ich mich nur an welcher Stelle ich die aufrufen muss, um komischen Fehlermeldungen vorzubeugen.
Oder steckt in der DLL sowas auch schon drin?

Re: PB.Ex Mail (Windows)

Verfasst: 25.06.2019 19:27
von RSBasic
Um sicherzustellen, habe ich in einer Test-VM .NET Framework 4.5 deinstalliert und mit der DLL-Datei getestet.
Es schlägt natürlich fehl. D.h. die Anwendung mit der DLL-Datei stürzt gemeinsam ab.
Ich habe danach eine Test-DLL-Datei mit einer einfachen Funktion, die nur eine Zahl zurückgibt, aber nicht direkt auf eine .NET-Methode zugreift, getestet, aber wie ich vermutet habe, stürzt das eigene Programm ebenfalls ab.
D.h. meine DLL-Datei ist nicht in der Lage, rechtzeitig selber zu prüfen, ob .NET 4.5 installiert ist. Das ist etwa genauso wie, wenn eine 64 Bit-Anwendung auf einem 32 Bit-System prüfen möchte, ob es ein 64 Bit-System ist. Die Abfrage kommt einfach zu spät, da schon der Startpunkt in der DLL-Datei schon .NET 4.5 ist.
Deshalb ist es nur in deiner eigenen Anwendung möglich, auf installierte .NET-Version vorher zu prüfen und wenn kein .NET 4.5 installiert ist, dann darf keine einzige Funktion aus der DLL-Datei ausgeführt werden (DLL-Datei laden ist grundsätzlich kein Problem), sonst stürzt dein Programm ab.
Deine Abfrage muss auf jeden Fall vor dem ersten Funktionsaufruf stehen. Ob vor oder nach LoadLibrary() ist egal, aber ich würde es lieber vor LoadLibrary() machen.

Re: PB.Ex Mail (Windows)

Verfasst: 25.06.2019 20:49
von HeX0R
O.k. das sollte kein Problem sein, Danke!

Re: PB.Ex Mail (Windows)

Verfasst: 26.06.2019 08:02
von dige
Wie kann man denn prüfen, ob .NET auf dem Rechner installiert ist? Gibt es einen Registry Key?

Re: PB.Ex Mail (Windows)

Verfasst: 26.06.2019 08:13
von RSBasic
In der Registry kannst du das feststellen: https://docs.microsoft.com/de-de/dotnet ... -installed

Re: PB.Ex Mail (Windows)

Verfasst: 26.06.2019 12:54
von HeX0R
Ja genau, das hatte ich auch als Basis genommen.
Die Funktion gibt die Version zurück, oder aber nichts, falls kein .NET >= 4.5 installiert ist.

Code: Alles auswählen

Procedure.s CheckNetFrameWork4_5()
	Protected Result.s, hKey, lpcbData, ReleaseInfo.l, lpType, Path.s, Key.s
	
	;Source: https://docs.microsoft.com/de-de/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
	
	Path = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
	Key  = "Release"
	
	If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, Path, 0, #KEY_READ, @hKey) = #ERROR_SUCCESS
		lpcbData = 4
		RegQueryValueEx_(hKey, @Key, #Null, @lpType, @ReleaseInfo, @lpcbData)
		RegCloseKey_(hKey)
	EndIf
	
	If ReleaseInfo
		Select ReleaseInfo
			Case 378389
				Result = "4.5"
			Case 378675, 378758
				Result = "4.5.1"
			Case 379893
				Result = "4.5.2"
			Case 393295, 393297
				Result = "4.6"
			Case 394254, 394271
				Result = "4.6.1"
			Case 394802, 394806
				Result = "4.6.2"
			Case 460798, 460805
				Result = "4.7"
			Case 461308, 461310
				Result = "4.7.1"
			Case 461808, 461814
				Result = "4.7.2"
			Case 528040, 528209, 528049, 528372
				Result = "4.8"
			Default
				Result = ">= 4.5"
		EndSelect
	EndIf
	
	ProcedureReturn Result
EndProcedure
Update!
Neue ReleaseInfo für aktuelle Version hinzugefügt.