无法安装字体

时间:2014-01-06 16:04:56

标签: c# windows visual-studio-2012 fonts

当我尝试在VS2012中运行以下代码段时,它会按预期安装字体。但是,当我从Windows资源管理器启动应用程序时,它返回以下错误:“无法安装所需的字体:系统找不到指定的文件”

    class Program
{
    [DllImport("gdi32.dll", EntryPoint = "AddFontResourceW", SetLastError = true)]
    public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
                                     string lpFileName);
    static void Main(string[] args)
    {
        string spath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\lucon.ttf";
        int result = AddFontResource(spath);
        int error = Marshal.GetLastWin32Error();
        if (error != 0)
        {
            Console.WriteLine("Unable to install needed font: "+ new Win32Exception(error).Message);
            Console.ReadKey();
        }
        else
        {
            Console.WriteLine((result == 0) ? "Font is already installed." : "Font installed successfully.");
        }
    }
}

lucon.ttf位于正确的文件夹中。当有人从Windows资源管理器启动控制台应用程序时,有人可以解释一下并帮助我让它运行吗?

1 个答案:

答案 0 :(得分:2)

您的错误处理已损坏。 Windows通常会在函数未失败时重置上一个错误。此外,AddFontResource()的特殊之处在于它设置最后一个错误,请查看MSDN文章。否则GDI函数的常见行为。所以你必须这样做:

    int result = AddFontResource(spath);
    if (result == 0) {
        Console.WriteLine("Unable to install needed font");
        Console.ReadKey();
    }

也可以修复pinvoke声明:

   [DllImport("gdi32.dll", CharSet = CharSet.Auto)]
   public static extern int AddFontResource(string lpFileName);