So installieren Sie eine Schriftart programmgesteuert (C #)

9

Gibt es eine Möglichkeit, eine Schriftart einem Windows 7/8 PC programmatisch dauerhaft hinzuzufügen? Ich habe mehrere Posts über den AddFontResource DLL-Import gelesen, aber es scheint nicht zu funktionieren.

Außerdem wird in der MSDN-Dokumentation die Schriftart angegeben nach einem Neustart des Computers gelöscht werden, sofern die Schriftart nicht in die Registrierung hinzugefügt wird.

Wie kann ich eine Schriftart dauerhaft installieren? Wie kann ich die Schriftart zur Registrierung hinzufügen? Ist es immer der gleiche Name / Eintrag?

Ich muss die Schriftart dynamisch zur Laufzeit hinzufügen, weil ich die Schriftart bekomme, sobald der Benutzer sie auswählt.

Anmerkung : Ich weiß, wie man einen Registrierungseintrag hinzufügt. Meine Frage betrifft mehr die Kompatibilität zwischen Windows XP, Vista, 7 und 8 und den verschiedenen Schriftarten. Vielleicht gibt es eine Möglichkeit, eine andere Exe zu starten, die die Schriftart für mich installiert.

    
El Mac 24.02.2014, 11:43
quelle

6 Antworten

5

Wie Sie bereits erwähnt haben, können Sie andere ausführbare Dateien starten, um TrueType-Schriftarten für Sie zu installieren. Ich kenne Ihre speziellen Anwendungsfälle nicht, aber ich werde die Methoden, die ich kenne, herunterfahren und vielleicht wird Ihnen einer von Nutzen sein.

Windows verfügt über ein integriertes Dienstprogramm namens fontview.exe , das Sie einfach aufrufen können, indem Sie Process.Start("Path\to\file.ttf") für jede gültige TrueType-Schriftart aufrufen ... unter der Annahme von Standard-Dateizuordnungen. Dies ist vergleichbar mit dem manuellen Start von Windows Explorer. Der Vorteil hier ist, dass es wirklich trivial ist, aber es erfordert immer Benutzerinteraktion pro Schriftart zu installieren. Soweit ich weiß, gibt es keine Möglichkeit, den "Install" -Teil dieses Prozesses als Argument aufzurufen, aber selbst wenn es Sie gäbe, müssten Sie noch die Berechtigungen erhöhen und die UAC bekämpfen.

Die interessantere Option ist ein Dienstprogramm namens FontReg , das die veraltete Datei fontinst.exe ersetzt, die in älteren Versionen enthalten war von Windows. Mit FontReg können Sie ein ganzes Fonts-Verzeichnis programmatisch installieren, indem Sie die ausführbare Datei mit dem Schalter / copy aufrufen:

%Vor%

Beachten Sie, dass sich die Schriftarten im Stammverzeichnis befinden müssen, wo immer sich FontReg.exe befindet. Sie müssen auch Administratorrechte haben. Wenn Sie Ihre Font-Installationen vollständig transparent machen möchten, würde ich vorschlagen, Ihre Anwendung mit erhöhten Berechtigungen zu starten und die UAC im Voraus zu genehmigen. Auf diese Weise benötigen Sie beim Erstellen Ihrer Kindprozesse keine Benutzergenehmigung. Permissions Zeug

    
B L 24.02.2014, 15:56
quelle
3

Ich habe das gleiche Problem in den letzten paar Tagen gehabt und jede Lösung, die ich gefunden habe, brachte andere Probleme hervor.

Ich habe mit meinem Kollegen einen Arbeitscode entwickelt, und ich dachte, ich würde ihn für alle teilen. Der Code kann im folgenden Pastebin-Link gefunden werden:

Installieren Sie eine Schriftart programmgesteuert in C #

    
kskyriacou 29.03.2015 20:31
quelle
2

Laut Dokumentation von AddFontResource ()

  

Diese Funktion installiert die Schriftart nur für die aktuelle Sitzung. Wenn das   System startet neu, die Schriftart ist nicht vorhanden. Um die Schriftart zu haben   installiert, auch nach dem Neustart des Systems, muss die Schrift in aufgelistet sein   die Registrierung.

Die beste Option, die ich gefunden habe, ist, die Schriftart in das Windows-Font-Verzeichnis

zu kopieren %Vor%

Und dann fügen Sie entsprechende Einträge in registery, Like

hinzu %Vor%     
Zain Ali 12.07.2014 15:30
quelle
1

Diese Lösung ist sauber, funktioniert ohne Neustart (!), aber es zeigt eine "Installing font ..." - Dialogbox (die von selbst verschwindet).

Fügen Sie zuerst einen Verweis auf system32 \ shell32.dll in Ihrem Projekt hinzu.
Und dann, verwenden Sie nur diese 3 Zeilen Code, um eine Schriftart zu installieren:

%Vor%

3 Zeilen Code:)

    
Erik Bongers 12.08.2016 12:59
quelle
0
%Vor%

.....

    
JxDarkAngel 09.10.2014 17:57
quelle
0

Wenn Sie Visual Studio 2017 verwenden, können Sie ein neues Visual Studio Installer - Setup-Projekt erstellen. Sie können das Installationsprogramm bearbeiten, um Dialogfelder zu entfernen, und nur das Dialogfeld "Beenden" verlassen, um dem Benutzer anzuzeigen, dass es ordnungsgemäß ausgeführt wurde.

Fügen Sie im Dateisystem auf dem Zielcomputer (im Visual Studio-Projekt) das spezielle Verzeichnis namens Fonts hinzu. Fügen Sie dann alle gewünschten Schriftarten in das Verzeichnis "Fonts" ein. Wenn Sie sich die Eigenschaften jeder hinzugefügten Schriftart ansehen, werden Sie feststellen, dass Visual Studio bereits davon ausgegangen ist, dass Sie jede Schriftart registrieren möchten.

Kompilieren Sie das Projekt, und Sie haben eine MSI mit einer setup.exe, die Sie bereitstellen können. Natürlich müssen Sie es als Administrator ausführen, aber ansonsten funktioniert dieses kleine Programm schnell und effizient. Ich fand, dass dies der einfachste Weg war, Schriften unter Windows zu installieren.

    
Jason Holt 10.08.2017 23:20
quelle

Tags und Links