Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Verwalten von installierten Fonts
Tossi65
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

Verwalten von installierten Fonts

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Tossi65
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

beantworten | zitieren | melden

@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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5959
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers