2012-09-13 16 views
0

前言中,我需要使用: * ClickOnce部署 *條形碼字體 *使用「FontName」而無法訪問Font對象的DevExpress控件,使我無法使用PrivateFontCollection。 *字體必須靜默安裝,並在安裝後立即運行。如何使ClickOnce應用程序知道新字體?

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) 

「名稱」的值更改爲「微軟無襯線」,演技就好像字體不可用一樣。

如何在沒有重新啓動/註銷的情況下在ClickOnce中顯示字體?

回答

0

控制檯應用程序中的P/Invoke方法無法正常工作,我沒有時間弄清楚爲什麼,但是在Shell.Application中使用VBScript。

Const FONTS = &H14& 

Set objShell = CreateObject("Shell.Application") 
Set objFolder = objShell.Namespace(FONTS) 
objFolder.CopyHere "\\server\Fonts\barcodefont.ttf" 

我實際上已經開始了這一點,但由於某種原因,沒有工作,所以我移動到其他方法,包括控制檯應用程序。

0

我不確定您可以通過將字體放入Windows目錄中來以傳統方式安裝字體 - ClickOnce沙箱將阻止您執行此類操作。

但是,您可以使用代碼動態添加字體,但只能爲當前用戶添加字體。

MSDN Article顯示了System.Drawing.Text命名空間的方法AddFontFile並有進一步討論這個問題here(忽略的人錯誤地說這是不可能的)

編輯:看起來它可能是你命名空間。請參閱C# - Read & Preview Font

我會嘗試僅從您的應用程序中以某種方式列出字體,以查看它們是否可以讀取。

+0

你不能 - 正如我所說的,「我創建了一個完全獨立的控制檯應用程序來完成這種字體安裝」。問題是,即使它已安裝,ClickOnce應用程序不會識別它。正如我所說的,System.Drawing.Text是一個測試,以證明它不僅僅是控制。這是我需要的控件,但我甚至無法將它放入ClickOnce沙盒中。 – Merennulli

相關問題