Специальные шрифты Windows Server 2008 во время рендеринга - PullRequest
1 голос
/ 02 мая 2011

Итак, у нас есть служба, работающая на Server 2008, которая запускает процесс (приложение C #), который выполняет некоторую визуализацию.Процесс выполняется успешно, но он использует системные шрифты (я полагаю, Arial) вместо шрифтов, которые должны быть загружены.Если я запускаю этот процесс вручную, войдя на сервер, шрифты загружаются успешно, и процесс отображается правильно.

Я попытался запустить этот процесс с помощью CreateProcessWithLogonW, но это все равно не работает.Я предполагаю, что это связано с неинтерактивными сеансами в Server 2008, но я не могу понять, как это решить.

Ответы [ 2 ]

0 голосов
/ 07 марта 2017

Я знаю, что вы нашли решение, но у меня была проблема, очень похожая на вашу (при запуске приложения через запланированное задание будет использоваться шрифт по умолчанию, но при локальном запуске он найдет установленный мной специальный шрифт), и я нашел другойрешение;В Server 2008 существует проблема, из-за которой пользовательские шрифты не регистрируются сразу после установки для неинтерактивных пользователей, тогда как обычные пользователи (т. Е. При запуске пользователя, фактически вошедшего в систему на компьютере), немедленно регистрируют шрифт.

Решение, которое работало для меня, состояло в том, чтобы просто перезагрузить компьютер, на котором был установлен шрифт, и шрифт начал работать под неинтерактивными учетными записями, как при включенном компьютере, он регистрируется правильно.Похоже, что в установке шрифта есть ошибка, из-за которой он не регистрирует шрифт правильно для неинтерактивных пользователей до перезагрузки.

0 голосов
/ 10 мая 2011

Я решил решить эту проблему с помощью PSExec , используя опции -i и -h. Насколько я понимаю, он запускает CreateProcessWithLogonW или что-то подобное под сценой. Это правильно создало новый сеанс с учетной записью пользователя за пределами session0. Единственное, что мне нужно было сделать, - убедиться, что лицензионное соглашение для PSExec было принято для пользователя, с которым я пытался запустить процесс. Я также запустил службу «Обнаружение интерактивных сервисов» на случай, если в сеансе появится EULA. После этого я отключил «Обнаружение интерактивных служб», так как он мне больше не нужен (я не совсем уверен, что мне нужно было сделать этот последний шаг).

...