none
установка дополнительных шрифтов групповой политикой RRS feed

  • Вопрос

  • доброго времени суток!

    задача - установить дополнительные шрифты на машины пользователей.

    написал политику которая при запуске компьютера исполняет батник вида:

    fontinst.exe /f fonts.ini ,где fonts.ini содержит список шрифтов,

    политика отрабатывает, батник тоже исполняется но вот только шрифты появляются только на машинах с windows 7,

    на хр ничего не происходит. пробовал политику не на компьютер, а на пользователя, давал полные права всем на папку windows\fonts,

    полные права на ветку реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts], наконец просто запустил батник на машине

    от имени администратора. ничего.

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

     

    20 марта 2011 г. 18:20

Ответы

  • Раскидывал шрифты основываясь на http://www.techdays.ru/videos/1066.html видео.

    как делал по шагам:

    1. создал папку на файл-сервере с правами на чтение и разместил там необходимые шрифты

    2. поставил необходимые шрифты себе на машину.

    3. при помощи утилиты GPP, используя визард, получил нужную ветку реестра.

    а. создал правило в конфигурация компьютера\настройка\конфигурация Windows\реестр

    4. создал правило копирования файлов шрифта

    а. конфигурация компьютера\настройка\конфигурация Windows\файлы

    что из этого всего вышло:

    из 8 шрифтов скопировано почему то только 6 (*.ttf=true; *.fon=false) пока не понял почему, хотя копировал с параметром "\*"

    ветка реестра появилась на всех подопытных.

    Считаю, что цель была достигнута, хотя есть небольшие недоработки.

    ЗЫ: очень удобно и без всяких там скриптов и прочего, самое главное всё визуально понятно или как там мелкомягкие любят говорить интуитивно понятно :)

    • Предложено в качестве ответа ©©©® 23 марта 2011 г. 6:13
    • Помечено в качестве ответа Vinokurov YuriyModerator 30 марта 2011 г. 10:05
    23 марта 2011 г. 6:12
  • мне "скрипт" в данном случае в чистом виде не кажется оптимальным решением. Зачем он будет каждую загрузку исполняться?

    1ое: стоит попробовать использовать для начала GPP.

    2ое: я использую msi пакет самописный на wix для этих целей. в этом пакете custom action скрипт (по типу укаазанного выше), если шрифты добавляют просто в каталог без повторной сборки msi. Такой вариант не будет загружать машину на этапе загрузки, только один раз - при "установке" через GPO+MSI. для повторного развёртывания (в случае добавления шрифтов в каталог) - в политике redeploy на пакете - и вуаля.

    Но более правильно будет собрать настоящий msi пакет, прописав шрифты в нём. тогда никаких custom action не потребуется, там есть необходимая таблица. Но при расширении перечня шрифтов потребуется пересобирать msi, хотя это можно и командной строкой делать (если wix использовать для этих целей).

    P.S. сам использую второй вариант.


    С Уважением, Бетке Сергей Сергеевич, http://sergey-s-betke.blogs.novgaro.ru
    22 марта 2011 г. 7:26

Все ответы

  • Я раскидывал шрифты на машины с помощью vbs-скрипта. Пример такого скрипта можно посмотреть здесь (http://www.windowsitpro.com/article/vbscript/the-trick-to-installing-fonts-with-a-vbscript-or-powershell-script.aspx). Его лишь нужно немного доработать, чтобы устанавливался не один шрифт, а все шрифты из какой-нибудь общедоступной папки.

    А вот нашел и доработанный пример (http://www.edugeek.net/forums/scripts/4756-script-install-fonts-workstations.html):

    Sub InstallFonts
      on error resume next
      Const FONTS = &H14
      dim , oFSO,oShell, oFolder1, oFolder2, sRoot
      sRoot="\\server\share\fonts\"
      Set oShell = CreateObject("Shell.Application")
      set oFSO=createobject("scripting.filesystemobject")
      Set oFolder1 = oShell.Namespace(FONTS)
      set oFolder2=ofso.getfolder(sRoot)
      for each oFile in oFolder2.files
        sName=lcase(oFile.name)
        if right(sName,4)=".ttf" then
          if not ofso.fileexists(oFolder1.self.path & "\" & sName) then
            oFolder1.copyhere sRoot & sName
          end if
        end if
      next
      on error goto 0
    End Sub 



    20 марта 2011 г. 20:02
  • мне "скрипт" в данном случае в чистом виде не кажется оптимальным решением. Зачем он будет каждую загрузку исполняться?

    1ое: стоит попробовать использовать для начала GPP.

    2ое: я использую msi пакет самописный на wix для этих целей. в этом пакете custom action скрипт (по типу укаазанного выше), если шрифты добавляют просто в каталог без повторной сборки msi. Такой вариант не будет загружать машину на этапе загрузки, только один раз - при "установке" через GPO+MSI. для повторного развёртывания (в случае добавления шрифтов в каталог) - в политике redeploy на пакете - и вуаля.

    Но более правильно будет собрать настоящий msi пакет, прописав шрифты в нём. тогда никаких custom action не потребуется, там есть необходимая таблица. Но при расширении перечня шрифтов потребуется пересобирать msi, хотя это можно и командной строкой делать (если wix использовать для этих целей).

    P.S. сам использую второй вариант.


    С Уважением, Бетке Сергей Сергеевич, http://sergey-s-betke.blogs.novgaro.ru
    22 марта 2011 г. 7:26
  • Раскидывал шрифты основываясь на http://www.techdays.ru/videos/1066.html видео.

    как делал по шагам:

    1. создал папку на файл-сервере с правами на чтение и разместил там необходимые шрифты

    2. поставил необходимые шрифты себе на машину.

    3. при помощи утилиты GPP, используя визард, получил нужную ветку реестра.

    а. создал правило в конфигурация компьютера\настройка\конфигурация Windows\реестр

    4. создал правило копирования файлов шрифта

    а. конфигурация компьютера\настройка\конфигурация Windows\файлы

    что из этого всего вышло:

    из 8 шрифтов скопировано почему то только 6 (*.ttf=true; *.fon=false) пока не понял почему, хотя копировал с параметром "\*"

    ветка реестра появилась на всех подопытных.

    Считаю, что цель была достигнута, хотя есть небольшие недоработки.

    ЗЫ: очень удобно и без всяких там скриптов и прочего, самое главное всё визуально понятно или как там мелкомягкие любят говорить интуитивно понятно :)

    • Предложено в качестве ответа ©©©® 23 марта 2011 г. 6:13
    • Помечено в качестве ответа Vinokurov YuriyModerator 30 марта 2011 г. 10:05
    23 марта 2011 г. 6:12
  • Вопрос: и как часто GPP это будет делать? (копировать файлы и дорисовывать реестр)? При каждом применении политик?


    С Уважением, Бетке Сергей Сергеевич, http://sergey-s-betke.blogs.novgaro.ru
    24 марта 2011 г. 5:38
  • В скрипт для одноразового выполнения встраивается, например, проверка с использованием флаг-файла:

    @echo off
    if not exist c:\ScriptFlags md c:\ScriptFlag
    if exist c:\ScriptFlags\abcxyz.flag goto :eof

    .....текст скрипта..... 

    echo %date% %time% %UserName% > c:\ScriptFlags\abcxyz.flag

    Второй раз скрипт уже не отработает.


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow MSTechnetForum on Twitter

    Посетите Блог Инженеров Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html
    25 марта 2011 г. 9:33
    Модератор
  • Решение то очевидное, только я реестр для флагов использую. Но всё равно - создание процесса, копирование веток реестра (через GPP) - мы получаем постоянную загрузку машины при каждом применении политик. А зачем?

    По сути, msi для того и есть. Я в таких случаях всё-таки стараюсь рисовать msi.


    С Уважением, Бетке Сергей Сергеевич, http://sergey-s-betke.blogs.novgaro.ru
    25 марта 2011 г. 13:48
  • там есть параметр выполнить один раз, теоретически если это применимо к устанавливаемому принтеру, то применив один раз политика больше не отрабатывается на нем, тем самым позволяет сменить\удалить принтер. как это применимо к шрифтам незнаю.
    15 апреля 2011 г. 3:10