C# 进程不使用字体

C# 进程不使用字体,c#,windows,azure,process,phantomjs,C#,Windows,Azure,Process,Phantomjs,我正在尝试打印由exe进程(phantomjs)生成的PDF中的汉字。但是,这些字符最终被命名为“?”。该进程是在C#中的工作者角色中创建的 在同一虚拟机上的cmd窗口中手动创建同一进程时,一切正常 但是,中文软件包是从能够手动成功创建PDF的同一个管理员帐户安装的 为了确保所有用户都能从语言包中看到相同的字体,我向机器上的所有系统用户添加了设置 这个过程是从C开始的,就像这样 Process.Start(new ProcessStartInfo { UseShellExecute =

我正在尝试打印由exe进程(phantomjs)生成的PDF中的汉字。但是,这些字符最终被命名为“?”。该进程是在C#中的工作者角色中创建的

在同一虚拟机上的cmd窗口中手动创建同一进程时,一切正常

但是,中文软件包是从能够手动成功创建PDF的同一个管理员帐户安装的

为了确保所有用户都能从语言包中看到相同的字体,我向机器上的所有系统用户添加了设置

这个过程是从C开始的,就像这样

Process.Start(new ProcessStartInfo
{
    UseShellExecute = true,
    FileName = "phantomjs.exe",
    Arguments = "pdf.js"
});

那么,我的手动cmd窗口进程如何正确使用中文字体,而不是由C#?

启动的进程呢?结果是错误的字符编码导致了问号。
从内容输入到HTML文档和输出设置的所有内容都必须使用正确的编码(例如UTF-8),然后才能正常工作。

如果不知道phantomjs在做什么,很难说清楚。但一般来说,不能指望设计为在非交互式环境中运行的程序能够做到这一点。如果您将其配置为在真实用户帐户中运行,尤其是在至少以交互方式登录过一次的用户帐户中运行,则可能需要检查它是否工作。@HarryJohnston Phantomjs是一种无头浏览器。我使用它的方式是呈现一个静态html页面,用javascript添加内容,然后打印成pdf甚至png屏幕截图。与使用常规浏览器相同,但不是交互式的。不寻常的是,在服务器端而不是客户端使用字体。让我重新表述一下:如果不查看失败的
phantomjs
中的特定代码,很难说。啊,对不起:)phantomjs运行的代码不太可能失败。打印是正确的,只是没有将汉字转换成问号。拉丁文字很好,也使用标准字体。每个汉字都应该使用SimSun字体,但它们没有。在安装语言包时,用户会获得额外的注册表项,这些注册表项会将这些字体添加到字体选择池中,我认为这是因为无法呈现字体。我真的不明白为什么它需要来自用户注册中心的任何信息才能做到这一点;Windows上的字体不是按用户安装的。但假设它正在用户注册表中查找某些内容,我的最佳猜测是,当用户第一次以交互方式登录时,这些内容会添加到注册表中。因此,请尝试在以交互方式登录的用户帐户的上下文中运行它。