Fonts 如何使ClickOnce应用程序了解新字体?

Fonts 如何使ClickOnce应用程序了解新字体?,fonts,devexpress,clickonce,Fonts,Devexpress,Clickonce,在前言中,我必须使用: *ClickOnce部署 *条形码字体 *使用“FontName”但无法访问字体对象的DevExpress控件,阻止我使用PrivateFontCollection。 *字体必须以静默方式安装,并在安装后立即工作 DevExpress阻止我使用PFC的部分是RichEditControl中的CharacterProperties对象。他们的支持网站已经有了一张以“抱歉,我们无法使用PrivateFontCollection”结尾的罚单 我读过很多资料,不断发现ClickO

在前言中,我必须使用: *ClickOnce部署 *条形码字体 *使用“FontName”但无法访问字体对象的DevExpress控件,阻止我使用PrivateFontCollection。 *字体必须以静默方式安装,并在安装后立即工作

DevExpress阻止我使用PFC的部分是RichEditControl中的CharacterProperties对象。他们的支持网站已经有了一张以“抱歉,我们无法使用PrivateFontCollection”结尾的罚单

我读过很多资料,不断发现ClickOnce在安装字体时无法立即使用字体。我正在使用P/Invoke安装字体,因为PFC对我不可用。我创建了一个完全独立的控制台应用程序来安装这种字体,字体显示在Word中,但它不会显示在我的ClickOnce应用程序中,即使我在Word之后打开了它。我可以通过正常的Windows单击方法手动安装字体,它会显示在Word和ClickOnce中

我用System.Drawing.Font验证了它对整个应用程序不可用,而不仅仅是挑剔的供应商控件:

Font fontTester = new Font(fontName, 12, FontStyle.Regular, GraphicsUnit.Pixel);
if (fontTester.Name == fontName)
“名称”值更改为“Microsoft Sans Serif”,就好像字体不可用一样


如何在不重新启动/注销的情况下让字体显示在ClickOnce中?

我不确定您是否可以通过将字体放入Windows目录以传统方式安装字体-ClickOnce沙盒将阻止您执行此类操作

但您可以使用代码动态添加字体,但仅限于当前用户

这显示了System.Drawing.Text命名空间上的AddFontFile方法,对此问题还有进一步的讨论(忽略错误地说不可能的人)

编辑:看起来可能是您的命名空间。看


我会试着从你的应用程序中列出字体,看看它们是否可以被读取。

控制台应用程序中的p/Invoke方法不起作用,我没有时间找出原因,但使用VBScript和Shell。应用程序可以

Const FONTS = &H14&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(FONTS)
objFolder.CopyHere "\\server\Fonts\barcodefont.ttf"
实际上,我是从这个开始的,但不管出于什么原因,它都不起作用,所以我转向了其他方法,包括控制台应用程序。

你不能——正如我所说,“我创建了一个完全独立的控制台应用程序,可以安装这种字体”。问题是,即使已安装,ClickOnce应用程序也无法识别它。正如我所说,System.Drawing.Text是一个测试,它证明了它不仅仅是控件。这是我需要进入的控件,但我甚至无法进入ClickOnce沙盒。