Laden...

Verwalten von installierten Fonts

Erstellt von Tossi65 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.265 Views
T
Tossi65 Themenstarter:in
83 Beiträge seit 2010
vor 5 Jahren
Verwalten von installierten Fonts

Hallo Leute,
ich brauch mal wieder Unterstützung von Euch. Ich muss ein FontUpdate machen. Dieser soll auf dem Zielsystem eigene Fonts installieren. Ich habe schon einiges bei Google gefunden. Also das Installieren geht einfach, aber ich will die Schriftarten vorher auch deinstallieren. Dafür hole ich mir die Installierten Schriften und filtere unserer raus. Soweit so gut. Aber hier stehen nur die Beschreibung der Schriftarten drin und nicht die Dateinamen. Wie komme ich jetzt von der Bezeichnung zu dem Dateinamen.

Desweiteren wie lösche ich dann die Datei im Fontsverzeichnis??? Das ist ja irgendwie geschützt.

Danke für Eure Hilfe.

Danke Tossi

16.807 Beiträge seit 2008
vor 5 Jahren

Löschen geht nur mit Adminrechten. Einfach die Datei löschen.
Dafür gibt es auch eine Win32 API (aber kein Äquivalent in .NET; musst also selbst PInvoken).

Die Fonts, die installiert sind, bekommst über InstalledFontCollection.
Soweit ich weiß gibt es aber keine Unterstützung anhand eines Fonts den Dateinamen zu ermitteln.

Du müsstest also eher über die Filenames iterieren und daraus den jeweiligen Font ermitteln.

PS: bitte in Zukunft einen Titel wählen, mit dem man etwas anfangen kann.
Ebenso wäre es praktisch, wenn Du den richtigen Forenbereich gewählt hättest.

T
Tossi65 Themenstarter:in
83 Beiträge seit 2010
vor 5 Jahren

@Abt
Danke, beim nächsten Mal mach ich es richtig.

Ich bin jetzt ein ganzes Stück weiter. Ich kann deinstallieren und wieder installieren.
Aber ich will die Rechner nicht neustarten, da sie sich in einer Produktionsumgebun stehen. Also nach dem Fonttausch mit SendMessage dem System die Änderung mitteilen. Aber dabie friert die Anwendung ein:


   const int WM_FONTCHANGE = 0x001D;
   const int HWND_BROADCAST = 0xffff;
   SendMessage(new IntPtr(HWND_BROADCAST), WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);

Woran liegt das? Ich habe schon gegoogelt aber nichts verwertbares gefunden.

Danke Tossi

16.807 Beiträge seit 2008
vor 5 Jahren

SendMessage ist ein absolutes NoGo, weil blocking. Daher natürlich auch das Einfrieren der Anwendung.
IIIRC gehört SendMessage auch zu den absoluten Windows Basic Pitfalls.

Verwende ne asynchrone API wie SendMessageCallback...

5.657 Beiträge seit 2006
vor 5 Jahren

Das ist zwar ein bißchen off-topic, aber unter WPF kann man Schriftarten direkt mit der Anwendung ausliefern: Packaging Fonts with Applications.
Da kann man sich den Aufwand sparen, die Dateien einzeln zu installieren.

In allen anderen Fällen sollte man das seinem Installer überlassen, die meisten sollten auch das Installieren (und Deinstallieren) von Fonts unterstützen.

Weeks of programming can save you hours of planning