仕事で自作のセットアッププログラムの中から Windows にフォントをインストールする必要が出てきた。
最近はフォントフォルダにコピーするだけではダメで、レジストリに登録する必要があるみたい。とりあえず見よう見まねでレジストリに登録するようコードを書いてみたけど何故だか上手くいかず、結局、Shell.Application
をOLEオートメーション(って今でも言うの?)で操作する方法で何とか解決できた。
以下はそのサンプル。
sample.cs
var font_path = @"C:\PATH\TO\FONT.TTF";
if (File.Exists(font_path))
{
Type instanceType = Type.GetTypeFromProgID("Shell.Application");
dynamic shellApplicaition = Activator.CreateInstance(instanceType);
dynamic folder = shellApplicaition.Namespace(Path.GetDirectoryName(font_path));
dynamic folderItem = folder.ParseName(Path.GetFileName(font_path));
folderItem.InvokeVerb("Install");
}
else
MessageBox.Show("File not exist");