即使 Windows 重新启动后,C# AddFontResource 仍无法工作

2024-03-01

我正在尝试使用下面的代码使用 C# 代码安装字体。

调用InstallFont不会抛出任何异常并返回1。我认为这表明它已经安装了字体。但是,该字体既没有出现在 Windows Fonts 文件夹中的已安装字体列表中,也没有出现在检查 InstalledFontCollection 时,也没有显示在我的软件中。我已经尝试安装后重新启动计算机,但仍然无法使用。

如果我通过双击 Windows 资源管理器并单击“安装”来手动安装该文件,则字体安装不会出现问题。

我在 Windows 7 64 位操作系统上使用 C#、Visual Studio 2010、Microsoft .NET Framework 4.0。

任何帮助将不胜感激。

非常感谢, 保罗

清单文件包括:

requestedExecutionLevel level="requireAdministrator" uiAccess="false"

申请代码:

[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[DllImport("gdi32.dll", EntryPoint = "AddFontResourceW", SetLastError = true)]
public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)] string lpFileName);

public static int InstallFont()        
{
    InstalledFontCollection ifc = new InstalledFontCollection();

    if (ifc.Families.Any(item => item.Name == "Arial Narrow"))
        return 100; // Font already installed

    string filename = @"C:\Users\username\Downloads\ARIALN.TTF";

    const int WM_FONTCHANGE = 0x001D;
    const int HWND_BROADCAST = 0xffff;

    int added = AddFontResource(filename);
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

    return added;
}

请务必查看有关 AddFontResource() 的 MSDN 库文章:

此函数仅为当前会话安装字体。当系统重新启动时,该字体将不存在。要在重新启动系统后也安装字体,该字体必须列在注册表中。

InstalledFontCollection 类仅枚举实际安装的字体并忽略临时字体。写入注册表项并将文件复制到 c:\windows\fonts 很大程度上是安装程序的职责。除了通过控制面板小程序之外,微软没有记录如何做到这一点。如果你想尝试一下,注册表项是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使 Windows 重新启动后,C# AddFontResource 仍无法工作 的相关文章

随机推荐

  • 有没有办法让 MySQL 服务器将数据库更新“推送”到客户端程序?

    一个典型的场景 假设用户正在向 MySQL 提供数据 而客户端远程连接到 MySQL 每当用户更新数据库中的字段时 我希望立即通知客户端 将此视为黑莓的 推送邮件 功能 我不想要的是客户端必须偶尔 ping MySQL 服务器以查看是否有任
  • 在 Spark DataFrame-Scala 中格式化 TimestampType

    当我尝试将字符串字段转换为 Spark DataFrame 中的 TimestampType 时 输出值具有微秒精度 yyyy MM dd HH mm ss S 但我需要的格式是yyyy MM dd HH mm ss即 不包括微秒精度 另外
  • CGAL:线段和多边形之间的交点?

    我有一组多边形 我想测试它和线段之间的交集 我检查了手册 但找不到匹配的功能 点 线 线段 三角形 平面之间确实存在交点 并且多边形之间的交点也在那里 我的问题是 有这样的功能吗 如果不是 是否意味着我需要将多边形分解成段并在这些段之间进行
  • 是否可以在 Perl foreach 循环中分配两个变量?

    是否可以在 Perl foreach 循环中将数组中的相同数据分配给两个变量 我正在使用 Perl 5 我想我在 Perl 6 中遇到了一些东西 像这样的东西 my var1 my var2 foreach var1 var2 array
  • postgresql 中的临时表在所有客户端会话中都可见吗?

    我想创建一个临时表 以便能够将其连接到几个表 因为将这些表与建议的临时表的内容连接起来需要花费大量时间 获取临时表的内容非常耗时 重复它一遍又一遍地花费越来越多的时间 当我的需求完成时 我将删除临时表 我想知道这些临时表是否在其他客户端会话
  • 如何让 fontawesome 在 Azure 网页部署上工作?

    我们正在使用 Twitter Bootstrap 和字体真棒 http fortawesome github com Font Awesome用于图标支持 当部署到我们的一台 IIS 服务器时 我需要添加 MIME 支持 当部署到Azure
  • 调整图像大小而不丢失 EXIF 数据?

    我编写了一个小脚本 可以从 FTP 服务器下载 TIFF 图像 然后调整它们的大小并将它们保存为 JPG 到目前为止 一切顺利 但在压缩步骤 如下所列 中 我丢失了文件中的 EXIF 数据 有没有一种优雅的方法可以在不丢失 EXIF 数据的
  • 如何从 Python ConfigParser .items() 中排除默认值?

    我使用 ConfigParser 从配置文件加载数据 如下所示 测试 conf myfiles fileone datadir s somefile foo filetwo datadir s nudderfile foo load py
  • 尝试实施 Azure Active Directory B2C 时出现 404 错误

    我正在尝试在我正在开发的新页面中实现 Azure Active Directory B2C 但我得到了这个404 File or directory not found尝试从我的页面登录时出错 我创建了租户 注册了我的应用程序 创建了我的政
  • Elasticsearch 使用带有同义词的 shingle 过滤器

    我有以下文件 south africa north africa 我想从以下位置检索我的 南非 文档 s africa a southafrica b safrica c 我定义了以下过滤器和分析器 POST test index sett
  • 非 2xx 状态代码响应是否应包含 CORS 特定标头

    非 2XX 状态代码响应是否仍包含 CORS 特定标头 例如Access Control Allow Origin Access Control Allow Methods and Access Control Max Age 这对客户来说
  • Bootstrap 4 - 如何使固定顶部导航栏在滚动时消失

    使用 Bootstrap 4 如何使固定顶部导航栏在滚动时消失 我在下面附上了默认 Bootstrap 4 导航栏的 html 代码
  • 无法加载 DLL“db2app64.dll”

    我正在写一个 NET框架应用程序并尝试连接到服务器上的 DB2 数据库 尝试时 我收到错误 System DllNotFoundException 无法加载 DLL db2app64 dll 找不到指定的模块 HRESULT 异常 0x80
  • PDF:什么是 DeviceRGB?

    Is this a 自己的色彩空间 例如 Adob eRGB 和 sRGB 或者是这个 b 设备使用的 RGB 色彩空间的名称 如果是 b 应该使用什么颜色空间来渲染 pdf sRGB 是默认使用的吗 pdf 查看器应用程序是否应该能够更改
  • 在 Xcode 7 GM 上启用僵尸对象会导致 _NSZombie_BSXPCMessage 类在两者中实现?和?

    刚刚下载了 XCode 7 GM 并在我的应用程序的 iOS 9 模拟器上尝试一下 但是 我在控制台上收到一条奇怪的消息 objc 2213 Class NSZombie BSXPCMessage is implemented in bot
  • 在 MVC 应用程序中使用 jquery 与 ajax 和 json [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在开发一个 MVC 应用程序 使
  • HTML 验证:为什么将交互元素放入交互元素内无效?

    免责声明 我知道它不是有效的 HTML 我想了解为什么不允许 W3C 建议像这样的交互元素button or a不得包含其他交互元素 我可以找到很多提到此规则和一些解决方法的资源 还有一些与此规则如何影响可访问性和屏幕阅读器相关的资源 但几
  • PHP 日期时间设置时区 2038

    我在项目中使用 DateTime 转换所有日期 从 UTC 到欧洲 维也纳 现在我的日期超过 2038 年 但无法获得正确的时间 示例代码 met new DateTimeZone Europe Vienna utc new DateTim
  • 为什么我无法更改 UILabel 的框架?

    我这两天一直在尝试修改一个框架UILabel 哪个 很荒谬 UILabel是一个 IBOutlet 但这不是原因 为什么它不起作用 我试图创建一个UILabel以编程方式和 它仍然不起作用 我是这样做的 self descriptionLa
  • 即使 Windows 重新启动后,C# AddFontResource 仍无法工作

    我正在尝试使用下面的代码使用 C 代码安装字体 调用InstallFont不会抛出任何异常并返回1 我认为这表明它已经安装了字体 但是 该字体既没有出现在 Windows Fonts 文件夹中的已安装字体列表中 也没有出现在检查 Insta