Средство просмотра фотографий в Windows Server 2019/2016

Обновлено 24.04.2023

PhotoViewer

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разобрали, как изменить формат файла в Windows системах. Движемся дальше и сегодня я вас научу возвращать в видимый состав Windows Server 2016 или Windows Server 2019, такого компонента Photo Viewer ( средство просмотра фотографий Windows). Он как выяснилось отсутствует в системе есть, но воспользоваться вы им не можете пока не произведете некоторые манипуляции, в очередной раз удивляюсь для чело Microsoft опять все усложнило.

Возможности рабочего стола в Windows Server 2019

Сразу оговорюсь, что все описанные действия актуальны и для Windows Server 2016.

Ранее мы с вами устанавливали Windows Server 2012 R2, это хорошая операционная система, которая после инсталляции имеет минимальный функционал, который можно расширять за счет ролей и компонентов. Когда вы установите роль удаленных рабочих cтолов и запустите пользователей на ваш RDS сервер, то первое на что они пожалуются, это будет отсутствие компонента средства просмотра фотографий, к которому они привыкли на клиентских версиях. И это нормально, кому удобно открывать файлы формата jpeg, png, bmp и другие через встроенный, классический paint.

Как включить Photo Viewer в Windows Server 2016

Для решения данной проблемы мы устанавливали компонент "Возможности рабочего стола (Desktop Experience)". Возможности рабочего стола возвращал в систему:

  • Photo Viewer ( средство просмотра фотографий Windows)
  • Средство очистки диска (Disk Cleanup)
  • Проигрыватель Media Player
  • Темы оформления

Все это великолепно, до тех пор когда вы не установите службу удаленных рабочих столов на Windows Server 2019, посмотрев список компонентов, вы не обнаружите "Возможности рабочего стола (Desktop Experience)", по простой причине, что он якобы уже устанавливается во время установки Windows с графическим режимом. Но вы же понимаете, что пользователям по барабану на вашу ситуацию, им нужна комфортная работа на хостах RDSH, и тут у вас два выхода, либо поставить сторонний софт, что не очень хорошо, дополнительная сущность для обновления, и второй вариант раскопать внутренности Windows Server 2019 и попытаться найти там встроенный, но спрятанный PhotoViewer. Я пошел по второму варианту.

Как вернуть Photo Viewer в Windows Server 2019/2016

По умолчанию в Windows Server 2019 не зарегистрирована специальная библиотека отвечающая за работу компонента "Средство просмотра фотографий Windows". Перейдите в:

C:\Program Files (x86)\Windows Photo Viewer

Тут есть библиотека PhotoViewer.dll, которая и отвечает за "Средство просмотра фотографий Windows". Чтобы ее зарегистрировать, вам нужно открыть командную строку от имени администратора и ввести:

regsvr32 “C:\Program Files (x86)\Windows Photo Viewer\PhotoViewer.dll”

Регистрация Photo Viewer в Windows Server 2019

Теперь, когда мы зарегистрировали необходимую .dll, нам нужно импортировать ключи реестра, которые добавят Windows Photo Viewer в меню "Открыть с помощью" и установить ассоциации файлов по умолчанию для .jpg, .jpeg и .jpe файлы. Кстати так же отдельно зарегистрировать библиотеку PhotoViewer.dll вы можете и с помощью моего ключа реестра, который будет в составе пакета, описанного ниже. Вот его содержимое:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\photoviewer.dll]

[HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell]

[HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open]
"MuiVerb"="@photoviewer.dll,-3043"

[HKEY_CLASSES_ROOT\Applications \photoviewer.dll\shell\open\command]
@=hex(2):25,00,53,00,79,00,73, 00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00, 65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\
6e,00,64,00,6c,00,6c,00,33,00,32, 00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\
00,50,00,72,00,6f,00,67,00,72,00, 61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\
25,00,5c,00,57,00,69,00,6e,00,64, 00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\
00,74,00,6f,00,20,00,56,00,69,00, 65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\
6f,00,74,00,6f,00,56,00,69,00,65, 00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\
00,22,00,2c,00,20,00,49,00,6d,00, 61,00,67,00,65,00,56,00,69,00,65,00,77,00,\
5f,00,46,00,75,00,6c,00,6c,00,73, 00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\
00,31,00,00,00

[HKEY_CLASSES_ROOT\Applications \photoviewer.dll\shell\open\DropTarget]
"Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"

[HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print]

[HKEY_CLASSES_ROOT\Applications \photoviewer.dll\shell\print\command]
@=hex(2):25,00,53,00,79,00,73,00, 74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00, 65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\
6e,00,64,00,6c,00,6c,00,33,00,32, 00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\
00,50,00,72,00,6f,00,67,00,72,00, 61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\
25,00,5c,00,57,00,69,00,6e,00,64, 00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\
00,74,00,6f,00,20,00,56,00,69,00, 65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\
6f,00,74,00,6f,00,56,00,69,00,65, 00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\
00,22,00,2c,00,20,00,49,00,6d,00, 61,00,67,00,65,00,56,00,69,00,65,00,77,00,\
5f,00,46,00,75,00,6c,00,6c,00,73, 00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\
00,31,00,00,00

[HKEY_CLASSES_ROOT\Applications \photoviewer.dll\shell\print\DropTarget]
"Clsid"="{60fd46de-f830-4894-a628-6fa81bc0190d}"

Чуть не забыл для любителей PowerShell, есть возможность подключить библиотеки и с его помощью. Создайте скрипт с таким содержимым, только не забудьте отключить защиту запуска неподписанных скриптов или же откройте PowerShell ISE в режиме администратора и введите:

If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll" -ItemType RegistryKey -Force}
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell" -ItemType RegistryKey -Force}
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open" -ItemType RegistryKey -Force}
Set-ItemProperty -path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open" -Name "MuiVerb" -Type "String" -Value "@photoviewer.dll,-3043"
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open\command")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open\command" -ItemType RegistryKey -Force}
Set-ItemProperty -path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open\command" -Name "(Default)" -Type "ExpandString" -Value "%SystemRoot%\System32\rundll32.exe `"%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll`", ImageView_Fullscreen %1"
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open\DropTarget")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open\DropTarget" -ItemType RegistryKey -Force}
Set-ItemProperty -path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open\DropTarget" -Name "Clsid" -Type "String" -Value "{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print" -ItemType RegistryKey -Force}
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print\command")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print\command" -ItemType RegistryKey -Force}
Set-ItemProperty -path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print\command" -Name "(Default)" -Type "ExpandString" -Value "%SystemRoot%\System32\rundll32.exe `"%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll`", ImageView_Fullscreen %1"
If ( -Not ( Test-Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print\DropTarget")){New-Item -Path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print\DropTarget" -ItemType RegistryKey -Force}
Set-ItemProperty -path "Registry::HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\print\DropTarget" -Name "Clsid" -Type "String" -Value "{60fd46de-f830-4894-a628-6fa81bc0190d}"

Подключение Photo Viewer через PowerShell

Теперь в контекстном меню у вас уже будет доступен пункт "Открыть с помощью - Просмотр фотографий Windows"

Выбор средство просмотра фотографий в Windows из списка

Скачать ключи реестра вы можете по ссылке (Раздел "Дополнения к Windows" 46 пункт )

После скачивания вам нужно распаковать архив, в итоге у вас будет вот такой состав.

  • ON_Windows_2016_2019_Photo_Viewer.reg - Добавляет нужные ключи реестра для ассоциации, запускается первым.
  • PhotoViewer.all.reg - сопоставляет ассоциации для bmp, jpe, jpeg, jpg, png, tif, tiff со средством просмотра фотографий Windows (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.bmp.reg - сопоставляет ассоциации для bmp (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.jpe.reg - сопоставляет ассоциации для jpe (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.jpeg.reg - сопоставляет ассоциации для jpeg (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.jpg.reg - сопоставляет ассоциации для jpg (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.png.reg - сопоставляет ассоциации для png (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.tif.reg - сопоставляет ассоциации для tif (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • PhotoViewer.tiff.reg - сопоставляет ассоциации для tiff (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей)
  • Register_Only_PhotoViewer.dll.reg - регистрирует библиотеку PhotoViewer.dll

Восстановление Photo Viewer в Windows Server 2019

Для того, чтобы ваша Windows Server 2019 могла правильно использовать  средство просмотра фотографий в Windows, вам нужно добавить ключи реестра отвечающие за эти ассоциации. Сама ветка реестра находится по пути:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations

По умолчанию, там есть два ключа отвечающие за tif и tiff.

Ключи реестра отвечающие за ассоциации файлов с Photo Viewer

По их аналогии я создаю ключи для:

  • ".jpg"="PhotoViewer.FileAssoc.Jpeg"
  • ".wdp"="PhotoViewer.FileAssoc.Wdp"
  • ".jfif"="PhotoViewer.FileAssoc.JFIF"
  • ".dib"="PhotoViewer.FileAssoc.Bitmap"
  • ".png"="PhotoViewer.FileAssoc.Png"
  • ".tiff"="PhotoViewer.FileAssoc.Tiff"
  • ".jxr"="PhotoViewer.FileAssoc.Wdp"
  • ".bmp"="PhotoViewer.FileAssoc.Bitmap"
  • ".jpe"="PhotoViewer.FileAssoc.Jpeg"
  • ".jpeg"="PhotoViewer.FileAssoc.Jpeg"
  • ".gif"="PhotoViewer.FileAssoc.Gif"
  • ".tif"="PhotoViewer.FileAssoc.Tiff"

Запустите файл "ON_Windows_2016_2019_Photo_Viewer.reg". Подтвердите добавление ключа реестра.

Добавление ключа реестра средство просмотра фотографий в Windows для

Успешное добавление ключа реестра в Windows Server 2019

В результате чего у вас прибавится ключей реестра.

Добавленные ключи реестра для ассоциации файлов jpeg, jpg, png, bmp, tif, tiff для Photo Viewer

Далее вы можете уже запускать файлы под свои форматы, или же запустить PhotoViewer.all.reg, который сопоставит ассоциации для bmp, jpe, jpeg, jpg, png, tif, tiff со средством просмотра фотографий Windows (Применяется сразу и не требует перезагрузку сервера, применяется для всех пользователей). В результате файлы данных форматов будут открываться для пользователей в привычном режиме.

Программы по умолчанию в Windows Server 2019

Как сделать Photo Viewer программой по умолчанию через групповую политику

Еще можно сделать отдельную политику, которая будет делать ассоциацию файлов jpeg, jpg, png, bmp, tif, tiff  со средством просмотра фотографий через GPO.

Единственный момент, что данный метод будет действовать исключительно на новых пользователей RDS фермы, так сделала Microsoft и не забываем, что вы так же должны активировать библиотеку PhotoViewer.dll

Суть метода в использовании XML файла (DefAppAssoc.xml) в котором будут прописаны все ассоциации. Данный файл будет импортироваться пользователю при входе в систему. Сам метод я подробно описывал, вот пример такого файла.

Настройка Photo Viewer через групповую политику

Как дополнительный вариант, вы можете через PowerShell или ту же групповую политику импортировать мои reg файлы, которые так же установят ассоциации графических файлов со средством просмотра фотографий.

Как сделать Photo Viewer программой по умолчанию в Windows Server 2022 или Windows 12

В Windows Server 2022 и Windows 12, перестали работать описанные ранее ключи реестра, и файл XML ассоциаций, так же не работает для старых профилей если у них уже были выставлены ассоциации. Но я уже стрелянный воробей и нашел прекрасное решение:

  • Вы должны зарегистрировать библиотеку средства просмотра, это я показывал выше
  • Далее вы должны взять мой скрипт и сопоставить для нужных вам раширений использование Windows Photo Viewer
  • Ну и иметь список серверов на которых вы хотите это сделать, но можете и локально.

Давайте посмотрим с чем у меня связан формат PNG, который я ранее просил операционную систему Windows Server 2022 открывать через средство просмотра фотографий.

assoc .png

Видим, что это pngfile, не понятное какое-то приложение😅. Давайте тперь поймем с кем связана запись pngfile.

ftype pngfile

В результате видно, что за это отвечает приложение:

ftype pngfile=%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1

понять, с какой программой связан тип файла

Зная это выполним вы можете этим управлять, например сделать для формата .jpeg то же приложение, для этого пишем:

ftype jpegfile=%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1

Для массового исправления, например на RDS ферме используем мой скрипт PowerShell:

#Скрипт с сайта https://pyatilistnik.org/ разработал Иван Сёмин, разрешается его копировать на другие сайты только с указанием активной ссылки на источник

$Servers = Get-Content "C:\Temp\RDS\servers.txt"

#Для png
ForEach ($Server in $Servers) {
Invoke-Command -ComputerName $Server -ScriptBlock {
cmd /c ftype pngfile=%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1
}
}

#Для jpeg
ForEach ($Server in $Servers) {
Invoke-Command -ComputerName $Server -ScriptBlock {
cmd /c ftype jpegfile=%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1
}
}

#Для gif
ForEach ($Server in $Servers) {
Invoke-Command -ComputerName $Server -ScriptBlock {
cmd /c ftype giffile=%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1
}

}

Для того, чтобы массово проверить, текущие настройки на списке удаленных серверов, можете использовать вот такой PowerSherll скрипт:

$Servers = Get-Content "C:\Temp\RDS\servers-test.txt"

#Для png
ForEach ($Server in $Servers) {
Write-Host "Server $Server"
Invoke-Command -ComputerName $Server -ScriptBlock {
cmd /c ftype pngfile
}
}

#Для jpeg
ForEach ($Server in $Servers) {
Write-Host "Server $Server"
Invoke-Command -ComputerName $Server -ScriptBlock {
cmd /c ftype jpegfile
}
}

#Для gif
ForEach ($Server in $Servers) {
Write-Host "Server $Server"
Invoke-Command -ComputerName $Server -ScriptBlock {
cmd /c ftype giffile
}
}

удаленная проверка ассоциаций файлов

Самое крутое, что не требуется перезагрузка, все зменения вступят в силу немедленно и для всех пользователей, если что вы можете создать скриптик PowerShell для локального выполнения и выставить его в GPO на атозагрузку для компьютера, чтобы забыть об этой проблеме с новыми хостами

На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

14 Responses to Средство просмотра фотографий в Windows Server 2019/2016

  1. Александр:

    Спасибо! Очень помогло!

  2. Иван Семин:

    Рад, что смог вам помочь!

  3. Пират:

    зачем столько стараний?, что бы включить галимый PhotoViewer?
    или боитесь сточки — для домашнего использования? так сейчас все подключаются из дума…

  4. Иван Семин:

    Все просто, на RDS ферме люди привыкли к нему.

  5. Виктор Никитин:

    Здравствуйте.
    Напишу здесь, но это относится к целому сайту в общем.

    Вы мой спаситель!
    Практически всегда, когда возникает какая либо проблема — ответ обычно есть на двух сайтах. И Ваш «Пятилистник» — один из них.

    Отдельно хочу отметить прекрасное оформление ваших статей:Форматирование текстов, выделение важного и т.д.

    Очень много разных ваших «очерков» у меня распечатаны и стоят в шкафу;-)

    Премного благодарен!!!

    С запуском Просмотрщика фотографий также все получилось — Спасибо!

  6. Иван Семин:

    Рад, что вам помог и сайт нравится в целом.

  7. Игорек:

    Куда вводить содержимое реестра?

  8. Romans:

    Большое спасибо за ваше решение, помогло и решило мои проблемы. Единственно дополню незначительно, «ЭСКИЗЫ ПАПОК» порой нужны то же, необходимо сделать= Параметры Проводника-Вид-снять флажок «Всегда отображать значки, а не эскизы»

  9. Александр:

    Ну вот все написано грамотно и разжевано, для тех, кто чем то всегда не доволен, просто этот материал не для вас, оаз такие умные, нечего здесь делать))) А так все очень здорово и понятно!)

  10. Алексей:

    Огромное Спасибо! Подскажите ещё, как сделать чтоб при выделении нескольких файлов рисунков и через пкм нажать «Печать» выходило окно «Печать изображений» где можно выбрать размер картинки, сколько печатать на листе и т.п. как в Windows 10.

  11. Анатолий:

    Помогите, пожалуйста, понять эту строку:
    [HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell\open]
    «MuiVerb»=»@photoviewer.dll,-3043»

    Что значит Минус и 3043,
    если иконки под идентификатором 3043 нет в photoviewer.dll?

  12. Анатолий:

    Скачать ключи реестра вы можете по ссылке
    (Раздел «Дополнения к Windows» 46 пункт)

    Только пункт 48

  13. ACCU:

    Всем привет!
    Как на сервере решить следующие проблемы:

    1. смотреть фото в проводнике: как это делается стандартно в W10 (используя SVG-See с Github и WEB Codec с Github)?
    Или это невозможно на сервере в отличие от W10?

    2. Почему локально на сервере не отображаются в браузере Font Awesome (именно анимация!, сами символы отображаются) и Animate с Github (это библиотека анимации обьектов)? А снаружи они на сайте видны и значит работают корректно!

    Комп на котором несколько сайтов перевели с W10LTSC на WS2022 std и я имея локальный доступ к компу, иногда программирую на нем код для этих сайтов под WordPress.

    P.S На W10LTSC у меня таких проблем не было вообще.
    Что корячиться только удаленно?
    Или как-то можно решить эти вопросы?
    Спасибо за возможную помощь.

  14. Анатолий:

    Здравствуйте, исправьте пожалуйста
    Скачать ключи реестра вы можете по ссылке (Раздел «Дополнения к Windows» 46 пункт )
    Пункт 48 а не 46

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *