2009-09-02 7 views
2

This article m'a montré comment installer les polices à partir d'un script, mais maintenant je suis confronté au problème de les supprimer. Comment puis je faire ça ? Toute langue est ok, je vais convertir l'information à ce dont j'ai besoin plus tard.Comment puis-je supprimer les polices de mon code, sous Windows?

EDIT: Bon, je sais maintenant comment désinstaller les polices (la plupart au moins). J'émets des appels au RemoveFontResource. Après cela, j'utilise SendMessage avec les paramètres: 0xffff,0x001D,0,0 (HWND_BROACAST, WM_FONTCHANGE ... et j'ai oublié ce que les deux autres paramètres signifient). La chose est, cela supprime la police, mais dans l'entrée de Control Panel, la police apparaît toujours là (même si si vous essayez de le supprimer aussi, il dira qu'il ne peut pas lire à partir du fichier source ou du disque.)

donc, fondamentalement, je supprime une police dans cet ordre:

  • supprimer physiquement du C:\Windows\Fonts
  • appelant RemoveFontResource
  • appelant SendMessage

Quelle est la manière correcte de désinstaller?

Répondre

4

De toute la documentation que j'ai jamais vu ces trois lignes de code sont la façon de le faire « bon », mais comme nous savons bien que ça ne marche pas vraiment - comme prévu.

RemoveFontResource(fontPath);    
DeleteFile(fontPath); 
::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); 

REBOOT

J'ai exécuté le code ci-dessus et dupliqués votre problème (panneau de commande indique encore la police, mais le fichier de police est parti). J'ai ensuite redémarré. Maintenant, la police a disparu de l'applet Fonts Control Panel.

Autre chose à noter: même si le panneau de contrôle a montré encore la police comme « il » applications ne sont plus inscrites dans leurs listes de polices (j'ai essayé spécifiquement Wordpad, avant et après la suppression webdings.ttf - sans redémarrer l'ordinateur)

Oui je sais - redémarrer est une mauvaise solution - surtout si vous avez besoin de mettre à jour la police car vous ne pouvez pas le réinstaller (via le panneau de contrôle de toute façon - il prétend que la police est encore installée) jusqu'à ce que vous redémarriez).

Cependant, si tout ce que vous voulez faire est de supprimer la police - ne est pas la pire solution - la police est essentiellement disparu après avoir désinstaller (applications ne voient pas, son seul visible dans les polices du panneau de commande dans la mesure comme je peux le dire) et vous n'auriez pas besoin de forcer un redémarrage.

De l'aide du SDK sur RemoveFontResourceFont (qui peut indiquer pourquoi la bizarrerie est vu)

S'il y a des références exceptionnelles à une police, la ressource associée reste chargée jusqu'à ce qu'aucun contexte de périphérique l'utilise .

+0

Oui, mais cela devrait être fait par un processus automatisé. Le redémarrage n'est pas une option. – Geo

+0

Donc, un peu plus d'enquête semble pointer vers le service WMI. Si vous redémarrez ce service * après * la police est supprimée la liste des polices du panneau de contrôle est correcte (NOTE: si vous avez le dossier c: \ windows \ fonts ouvert dans l'explorateur lorsque vous redémarrez le service WMI et appuyez simplement sur F5 * le montre, mais quittez et redémarrez l'applet de contrôle des polices et vous verrez son disparu ET vous pouvez réinstaller la police) tout sans redémarrage ... Note supplémentaire: J'ai essayé de supprimer la police lorsque le service WMI ne fonctionnait pas et ce n'était pas avant qu'il ait été recommencé que la police supprimée a été enlevée du panneau de commande. – Ruddy

+0

Pouvez-vous également lister la commande pour redémarrer le service WMI? Peut-il être fait à partir de la ligne de commande? – Geo

1

Toutes les polices se trouvent dans C: \ WINDOWS \ Fonts \

Explorer masquer ce dossier pour afficher les noms des polices au lieu des vrais noms de fichiers, mais tout y est. Vous pouvez éditer et commenter les lignes de C: \ WINDOWS \ Fonts \ desktop.ini pour désactiver cette fonctionnalité et révéler les fichiers de polices (vous devrez peut-être rouvrir l'explorateur pour qu'il prenne effet).

4

Une fois que vous trouverez le nom réel Havenard mentionné et en utilisant l'article que vous avez mentionné que vous pouvez faire un

objFSO.DeleteFile(FontFilePath); 

où FontFilePath est le chemin du fichier du fichier que vous souhaitez supprimer.

Plus d'info ici: technet article

Un problème que vous pouvez rencontrer, que je ne pensais pas que j'ai vu ton commentaire, est qu'un programme peut exiger que la police pour un élément particulier. Toutes les polices système connues sont stockées dans le registre. Si vous supprimez une police, vous devez également supprimer la clé du registre. chemins de registre sont les suivantes

Windows 95 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts] 

Windows NT 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts] 

Les touches sont comme suit:

Key name = Full name of the font 
Key type = REG_SZ 
Key Value = name of font file 
+0

Je pourrais simplement utiliser un appel de suppression. Je me demandais si d'autres étapes seraient impliquées (comme le registre). – Geo

Questions connexes