Предисловие
Наверно Вы видели банкоматы, информационные киоски, рекламные панели, на которых отображается ошибка или уведомление системы. Если Вы не видели подобные общественные устройства «живьем», то Вы легко сможете найти подобные фотографии в интернете если поищете картинки по словам «банкомат ошибка windows». А однажды уведомление системы появилось в прямом эфире во время прогноза погоды, фото можно найти по словам «уведомление windows в прямом эфире». Ради интереса еще можете поискать «самый большой синий экран».
О чем же все это говорит?
— Вы любите кошек?
— Нет
— Вы просто не умеете их готовить!
Для специализированных устройств Майкрософт предлагает использовать Windows 10 IoT Enterprise, которая отличается от Windows 10 Enterprise только отсутствием универсальных приложений. Соответственно, с технической точки зрения Win 10 IoT Enterprise является настольной операционной системой, которая подразумевает взаимодействие с пользователем. Но на специализированных устройствах взаимодействия с пользователем не должно быть т.к. порой даже нет пользователя в привычном его понимании, особенно это касается рекламных панелей.
При подготовке специализированного устройства некоторые технические специалисты забывают о вышеуказанном нюансе совсем или забывают отключить какую-либо категорию уведомлений. Данная статья написана чтобы напомнить о некоторых особенностях настройки Windows для специализированных решений. В данной статье мы рассмотрим подготовку решения для одной бизнес-задачи.
Все настройки будут описаны для Win 10 IoT Enterprise 2016 LTSB, демо-версию которой можно скачать здесь.
Какую бизнес-задачу решаем?
Как-то раз я приехал в пункт самовывоза одного онлайн магазина. В данном магазине продавцы только выдавали товар или давали его посмотреть, а заказ нужно было оформлять только на сайте магазина. Чтобы можно было оформить заказ прямо в пункте самовывоза, в зале самовывоза было установлено множество ПК. Сами ПК были спрятаны, был только монитор и мышка, на экране была открыта специализированная база магазина, в которой можно было найти товар и оформить заказ и экранная клавиатура.
Рассмотрим подготовку аналогичного решения, которое будет предназначено для навигации по сайту www.quarta-embedded.ru. Предполагаемые условия использования – без источника бесперебойного питания и с минимальным техническим обслуживанием.
Подготовка решения
Шаг 1 – подготовка устройства
В качестве устройства был взят обычный ПК, с жестким диском 120 ГБ, оперативной памятью 4 ГБ. Режим загрузки ОС – Legacy.
Т.к. у нас устройство будет использоваться без источника бесперебойного питания нужно обязательно предусмотреть внеплановое отключение питания. Т.е. устройство должно само включаться при появлении питания, для этого необходимо соответствующим образом настроить BIOS устройства. Необходимые пункты в BIOS’е можно найти по интуитивно-понятным названиям, у меня это «Advanced > Power-On Options > After Power Loss», выставляем «On». Но если Вы хотите, чтобы при включении устройство оставалось выключенным, когда его выключили намеренно, то установите «Previous State».
Шаг 2 – установка Win 10 IoT
Установка Win 10 IoT Enterprise ничем не отличается от установки Win 10 Enterprise, поэтому не вижу особого смысла описывать установку. Я буду устанавливать «Win 10 IoT Enterprise 2016 LTSB x32» без подключения к интернету, чтобы в систему не «прилетело» ничего лишнего. При первой загрузке создал пользователя Admin.
Шаг 3 – сохранение образа системы
Что, не ждали такого поворота? Только установили систему и сразу сохраняем образ. При подготовке решения желательно периодически сохранять образ системы на тот случай если вдруг что-то пойдет не так. Тогда не нужно будет делать настройку системы сначала.
Когда мы говорим о создании образа мы затрагиваем вопрос тиражирования, но он настолько широкий, что ему можно посвятить отдельную статью и не одну, поэтому в данной статье я не буду подробно описывать данный вопрос.
Для создания технологического (промежуточного) образа я запечатаю систему командой
%SYSTEMROOT%\System32\Sysprep\sysprep.exe /audit /generalize /shutdown /quiet
и создам wim образ системного тома с помощью утилиты DISM.
Важно — если Вы пойдете тем же путем, то после разворачивания такого образа не забудьте скопировать содержимое каталога «Windows\System32\Recovery» на первый том в папку «Recovery\WindowsRE». И сделать это нужно до загрузки ОС т.к. после загрузки ОС каталог «Windows\System32\Recovery» уже будет пустым. У меня это реализовано следующим образом:
if exist W:\Windows\System32\Recovery\*.* (
xcopy W:\Windows\System32\Recovery\*.* S:\Recovery\WindowsRE\ /h /k /y
attrib +s +h +i S:\Recovery
attrib +s +h +i S:\Recovery\*.* /s /d
)
Обратите внимание, что после запечатывания система будет автоматически входить во встроенную учетную запись администратора. И теперь автоматически будет запускаться sysprep. Чтобы это окно мне не мешало, я добавил в shell:startup скрипт с одной единственной командой
taskkill /im sysprep.exe
Чтобы не забыть удалить скрипт, я сразу сделаю скрипт для запечатывания, в котором будет прописана команда для очистки автозапуска.
del "%systemdrive%\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.*" /q
Мне ведь все равно нужно будет запечатывать систему в oobe режиме.
Все технологические файлы я буду размещать в папке C:\Sysprep
Шаг 4 – установка драйверов
Как ни странно, но некоторые жалуются, что после установки Win 10 «драйверы не установились сами». Спешу Вас огорчить, само ничего не бывает, драйверы необходимо устанавливать. В системе идет некий набор стандартных драйверов, но вряд ли со стандартным набором драйверов можно будет использовать все возможности оборудования. Лучше всего если Вы сами установите наиболее подходящие драйверы для Вашего устройства. Windows может автоматически загружать драйверы из специального хранилища Майкрософта и устанавливать их, но не обязательно что там будут все необходимые драйверы или что это будут подходящие драйверы. Драйвер, который система установит автоматически может привести к сбою системы. Что же делать если Вы оказались в ситуации, когда нужно предотвратить такую автоматическую установку драйвера? Есть 2 варианта:
1. Отключить службу обновления
net stop wuauserv – команда остановки службы
sc config wuauserv start=disabled – изменить режим запуска службы на «Отключено»
Но в таком случае система не будет получать какие-либо обновления вообще
2. Отключить установку конкретного драйвера в групповых политиках
Для этого нужно:
Открыть редактор групповых политик командой gpedit
Перейти в раздел «Конфигурация компьютера\Административные шаблоны\Система\Установка устройства\Ограничение на установку устройств». Англоязычный вариант ветки «Computer Configuration\Administrative Templates\System\Device Installation\Device Installation Restrictions»
В данном разделе Вы сможете запретить установку драйвера по конкретному классу или ID оборудования. Для предотвращения установки других драйверов НЕ нужно устанавливать флажок «Также применить для соответствующих устройств, которые уже были установлены» «Also apply to matching devices that are already installed», иначе Вы сделаете использование устройства невозможным.
Т.к. у меня экспериментальное решение и драйверы особого значения не имеют, я не буду целенаправленно устанавливать драйверы. После подключения к интернету система нашла драйвер на некоторые устройства.
Шаг 5 – русификация системы
Думаю, что это действие весьма простое и его не нужно подробно описывать. Скажу, что для корректного отображения кириллицы я указал русский язык для программ, которые не поддерживают Юникод. Указал расположение, хотя в моем случае это не нужно. И попутно можно изменить часовой пояс т.к. по умолчанию UTC -8. Установил русскоязычный языковой пакет, когда я устанавливал языковой пакет через интернет, мне показалось это долгим, поэтому я установил его с помощью предварительно скачанного пакета «Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab», установил командой
DISM /Online /Add-Package /PackagePath:"%~dp0Microsoft-Windows-Client-Language-Pack_x%PROCESSOR_ARCHITECTURE:~-2%_ru-ru.cab"
После установки переключил основной язык системы на русский и включил опцию копирования языковых параметров для экрана приветствия и новых учетных записей.
Вот и все, русский язык добавлен, пожалуй, можно сохранить образ системы…
Шаг 6 – настройка питания
Наше устройство не должно засыпать и отключать монитор, поэтому нужно настроить питание соответствующим образом. Питание можно настроить с помощью скрипта:
powercfg -change -monitor-timeout-ac 0
powercfg -change -monitor-timeout-dc 0
powercfg -change -disk-timeout-ac 0
powercfg -change -disk-timeout-dc 0
powercfg -change -standby-timeout-ac 0
powercfg -change -standby-timeout-dc 0
powercfg -change -hibernate-timeout-ac 0
powercfg -change -hibernate-timeout-dc 0
pause
Шаг 7 – отключение аварийного режима загрузки
Важный момент – если у нашего устройства будет 2-3 раза подряд некорректное завершение работы, то система загрузится в режим восстановления, а этого допускать нельзя. Поэтому отключаем этот режим загрузки. Это можно сделать с помощью команды
bcdedit /set {current} bootstatuspolicy IgnoreAllFailures
Обратите внимание, что данная настройка прописывается в bcd хранилище, которое находится на разделе восстановления. Я не сохраняю раздел восстановления при сохранении образа системы, следовательно после разворачивания системы данная настройка будет в исходном состоянии т.к. будет новое bcd хранилище. Чтобы не забыть про данную настройку я добавлю ее в скрипт запечатывания в oobe режиме.
Шаг 8 – отключение сообщений об ошибках и всплывающих уведомлений
Чтобы система не выдавала сообщения об ошибках, запрос об отправке отчетов об ошибках, сообщения о проблемах с оборудованием, все это нужно отключить. Службу политики диагностики можно настроить в групповых политиках:
Конфигурация компьютера\Административные шаблоны\Система\Диагностика
Диагностика: настройка уровня выполнения сценария — Включить «Только обнаружение и диагностика»
Но мне проще все настроить с помощью одного reg файла.
Windows Registry Editor Version 5.00
;Подавление отображения ошибок системы
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows]
;"ErrorMode"=dword:00000000 ;Отображаются все сообщения
;"ErrorMode"=dword:00000001 ;Подавлять только сообщения об ошибках системы. Например, о нехватке виртуальной памяти
"ErrorMode"=dword:00000002 ;Подавлять все сообщения об ошибках. Например, об отсутствии dll
;Отключение отправки отчетов об ошибках
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]
;"Disabled"=dword:00000000 ;Отправка отчетов включена
"Disabled"=dword:00000001 ;Отправка отчетов отключена
;Настройка уровня выполнения сценария службы политики диагностики
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WDI]
;"ScenarioExecutionEnabled"=dword:00000000 ;Выключить возможность изменения уровня выполнения сценария
"ScenarioExecutionEnabled"=dword:00000001 ;Включить возможность изменения уровня выполнения сценария
"EnabledScenarioExecutionLevel"=dword:00000001 ;Только обнаружение и диагностика
;"EnabledScenarioExecutionLevel"=dword:00000002 ;Обнаружение, диагностика и решение проблем
Всплывающие уведомления можно настроить в групповых политиках «Конфигурация пользователя\Административные шаблоны\Меню «Пуск» и панель задач\Уведомления». Но мне проще включить режим «Не беспокоить», его можно включить в графическом интерфейсе, в центре уведомлений и в реестре. Т.к. эта настройка относится к конкретному пользователю, то и выполнять его нужно под целевым пользователем. Поэтому создаем пользователя, под которым и будет выполняться приложение для общественного использования. Пока этот пользователь будет в группе администраторы, для удобства настройки. Чтобы не было проблем с названием группы русская/английская, то получу название группы по SID’у.
net user User /add
wmic useraccount where "Name='User'" set PasswordExpires=False
for /f "tokens=2 delims==" %%i in ('wmic group where "SID='S-1-5-32-544'" get Name /value^|find "Name"') do set GroupName=%%i
net localgroup %GroupName% User /add
pause
И включаем режим не беспокоить.
Windows Registry Editor Version 5.00
;Включить режим "Не беспокоить"
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings]
"NOC_GLOBAL_SETTING_TOASTS_ENABLED"=dword:00000000 ;Режим включен
;"NOC_GLOBAL_SETTING_TOASTS_ENABLED"=dword:00000001 ;Режим отключен
Чтобы не забыть исключить пользователя из группы администраторы, добавлю команду на исключение в скрипт запечатывания.
for /f "tokens=2 delims==" %%i in ('wmic group where "SID='S-1-5-32-544'" get Name /value^|find "Name"') do set GroupName=%%i
net localgroup %GroupName% User /delete
Шаг 9 – настройка обновлений системы
Не помешает установить все актуальные обновления на момент подготовки системы. Настроить обновления Вы можете исходя из специфики работы Вашего устройства. Можно отключить установку всех обновлений или обновлений драйверов, как это сделать мы рассмотрели в шаге 4. А можно отключить установку обновлений системы и оставить обновление драйверов.
Windows Registry Editor Version 5.00
;Отключить установку обновлений. При этом драйверы будут обновляться
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
"NoAutoUpdate"=dword:00000001 ;Установка отключена
;"NoAutoUpdate"=dword:00000000 ;Установка включена
Но также возможна ситуация, когда нужно устанавливать обновления системы, но какое-то конкретное обновление выводит систему из строя. В этой ситуации можно запретить установку конкретного обновления. Это можно сделать с помощью утилиты wushowhide.diagcab, которую можно найти здесь.
В групповых политиках Вы можете найти множество детализированных настроек по установке обновлений. «Конфигурация компьютера\Административные шаблоны\Компоненты Windows\Центр обновления Windows»
Т.к. мне обновления не нужны я их отключу полностью:
net stop wuauserv
sc config wuauserv start=disabled
pause
Здесь я в очередной раз сохраню образ системы.
Шаг 10 – настройка запуска приложения
Навигация по сайту quarta-embedded.ru будет в IE, чтобы убрать доступ к адресной строке и настройкам можно включить полноэкранный режим в групповых политиках. «Конфигурация пользователя > Административные шаблоны > Компоненты Windows > Internet Explorer > Включение полноэкранного режима». И нужно запретить закрытие IE «Конфигурация пользователя > Административные шаблоны > Компоненты Windows > Internet Explorer > Меню браузера > Меню «Файл»: отключить закрытие окон браузера и проводника».
Для запуска приложения вместо оболочки системы будем использовать специальное средство запуска приложений – ShellLauncher. С его помощью можно:
1. Назначать запуск конкретного приложения для конкретного пользователя или группы пользователей
2. Контролировать работу запущенного приложения, при закрытии запущенного приложения можно:
- a. Перезапустить приложение
- b. Перезагрузить систему
- c. Выключить систему
- d. Не предпринимать никаких действий
Сначала нужно добавить ShellLauncher как компонент, это можно сделать в графическом интерфейсе «Панель управления > Программы > Включение и отключение компонентов Window», раздел «Блокировка устройства». Настроить запуск программ можно в ветке реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher». настройка запуска программ производится по SID’ам пользователей, SID’ы можно узнать с помощью утилиты whoami. Для включения ShellLauncher’а нужно просто заменить в реестре запуск стандартной оболочки на запуск ShellLauncher’а. И еще маленький нюанс, ShellLauncher не влияет на размеры и положение окна запущенной программы, а IE хотелось бы запустить развернутым на весь экран. Поэтому настраиваем режим запуска IE, опять же под пользователем User, заодно запрещаем вызов контекстного меню IE, чтобы пользователь ничего не испортил.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main]
"FullScreen"="yes"
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Restrictions]
"NoBrowserContextMenu"=dword:00000001
Теперь настраиваем ShellLauncher, опять же мне все удобней делать с помощью консоли…
@echo off
chcp 1251
echo Добавляем ShellLouncher в систему
DISM /online /Enable-Feature /all /FeatureName:Client-EmbeddedShellLauncher
echo.
echo Получаем SID пользователя User
for /f "tokens=2 delims==" %%i in ('wmic useraccount where "Name='User'" get SID /value^|find "SID"') do set SID=%%i
echo.
echo Настройка запуска iexplore.exe для пользователя User
reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\%SID%" /v Shell /t REG_SZ /d "C:\Program Files\Internet Explorer\iexplore.exe www.quarta-embedded.ru" /f
echo.
echo Настройка действия при закрытии IE
reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\%SID%" /v DefaultReturnCodeAction /t REG_DWORD /d 0 /f
echo.
echo Настройка запуска оболочки для группы администраторы
reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\S-1-5-32-544" /v Shell /t REG_SZ /d "explorer.exe" /f
echo.
echo Настройка действия при закрытии приложения для группы администраторы
reg add "HKLM\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher\S-1-5-32-544" /v DefaultReturnCodeAction /t REG_DWORD /d 3 /f
pause
И, в качестве примера, можно назначить запускаемую оболочку по умолчанию, когда пользователю не назначено никаких приложений.
Windows Registry Editor Version 5.00
;Если приложение по умолчанию не указывать, то будет запущен cmd.exe
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher]
"Shell"="explorer.exe"
;Нижеуказанный параметр определяет действие при завершении работы приложения
;"DefaultReturnCodeAction"=dword:00000000 ;Перезапуск приложения
;"DefaultReturnCodeAction"=dword:00000001 ;Перезагрузка
;"DefaultReturnCodeAction"=dword:00000002 ;Выключение
"DefaultReturnCodeAction"=dword:00000003 ;Действий не требуется
И включаем Shell Launcher
Windows Registry Editor Version 5.00
;Запустить ShellLouncher вместо стандартной оболочки
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Shell"="eShell.exe" ;Включить Shell Launcher
;"Shell"="explorer.exe" ;Выключить Shell Launcher
Шаг 11 – настройка отображения загрузки системы
В предыдущих версиях Windows можно было установить свои логотипы, которые отображались бы при загрузке системы, сейчас есть только две опции вкл. и выкл. Отключить процесс отображения загрузки можно в bcd хранилище, эти команды я выполню сразу и добавлю в скрипт запечатывания.
echo Отключение отображения логотипа Windows при загрузке. Для включения необходимо вместо true необходимо указать false
bcdedit /set {globalsettings} custom:16000067 true
echo Отключение анимации в виде шариков при загрузке Windows. Для включения необходимо указать false
bcdedit /set {globalsettings} nobootuxprogress true
Также можно скрыть процесс входа пользователя в систему.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\EmbeddedLogon]
;"HideAutoLogonUI"=dword:00000000 ;Отображение включено
"HideAutoLogonUI"=dword:00000001 ;Отображение выключено
Теперь включаем автоматический вход пользователя User, это можно сделать с помощью команды netplwiz. Перезагружаемся и смотрим что получилось, отображения хода загрузки ОС нет, отображения входа пользователя в систему нет. Только, непосредственно перед входом в систему на несколько секунд появляется значок Win и анимация в виде шариков, но это потому, что ОС в режиме аудита, после запечатывания в режиме oobe этого не будет. Автоматически запустился IE с адресом www.quarta-embedded.ru, чуть позже появилась вкладка microsoft.com, ну ничего, нужно будет добавить в файл ответов запечатывания команду на изменение настроек в реестре
reg add HKLM\Software\Microsoft\Internet Explorer\Main" /v "DisableFirstRunCustomize" /t REG_DWORD /d 1
Вот здесь я опять сделаю образ системы.
Шаг 12 – установка и удаление ключа Windows
Перед установкой ключа нужно отключить ПК от интернета, чтобы система не активировалась. Можно добавить ключ и сразу же его можно удалить, чтобы никто не смог его вытащить. При этом система все равно сможет активироваться.
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
slmgr /cpky
Шаг 13 – запечатываем систему
Чтобы система не задавала вопросов при первой загрузке после запечатывания в oobe режиме, я использую файл ответов, предварительно подготовленный в утилите «Windows System Image Manager». Запускаю скрипт для запечатывания, ниже содержание скрипта и файла ответов.
Скрипт для запечатывания:
del "%systemdrive%\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*.*" /q
for /f "tokens=2 delims==" %%i in ('wmic group where "SID='S-1-5-32-544'" get Name /value^|find "Name"') do set GroupName=%%i
net localgroup %GroupName% User /delete
bcdedit /set {current} bootstatuspolicy IgnoreAllFailures
bcdedit /set {globalsettings} custom:16000067 true
bcdedit /set {globalsettings} nobootuxprogress true
pushd "%~dp0"
%SYSTEMROOT%\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /quiet /unattend:Unattend.xml
Unattend.xml:
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="specialize">
<component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Path>reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f</Path>
<Order>1</Order>
<Description>Dont show key page</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path>
<Order>2</Order>
<Description>Dont make account</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>reg add "HKLM\Software\Microsoft\Internet Explorer\Main" /v "DisableFirstRunCustomize" /t REG_DWORD /d 1 /f</Path>
<Order>3</Order>
<Description>Disable First Run Customize</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>cmd.exe /c rd %systemdrive%\Sysprep /s /q</Path>
<Order>4</Order>
<Description>Del Folder</Description>
</RunSynchronousCommand>
</RunSynchronous>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Enabled>true</Enabled>
<Username>User</Username>
</AutoLogon>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-US; ru-RU</InputLocale>
<SystemLocale>ru-RU</SystemLocale>
<UILanguage>ru-RU</UILanguage>
<UILanguageFallback></UILanguageFallback>
<UserLocale>ru-RU</UserLocale>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
</component>
</settings>
<cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>
Итог
Что же получилось в итоге… Система загрузилась сама без каких-либо вопросов, запустился IE с нужной страничкой. Если учесть, что физического доступа к ПК не будет, а из средств ввода будет доступна только мышка, то вроде ничего сломать нельзя. Заходим в учетную запись администратора и видим, что папка Sysprep удалена. Система готова…
В данной статье мы постараемся ответить на часто задаваемые вопросы по отличиям настольных версий Windows 10 и так называемых «Embedded»-версий Windows 10 (т.е. версий для производителей встраиваемых устройств), которые получили приставку «IoT», от «Internet of Things».
Если в прошлых редакциях эти отличия были очевидны – явно отличающиеся названия, компонентная структура, использование специальных инструментов для сборки, то для Windows 10 Microsoft в стремлении к унификации версий, сделал более схожими названия, технические возможности, инструменты, политику поддержки и продвижения.
Все это привело к массе вопросов от пользователей (и даже сотрудников Microsoft из других подразделений!) относительно отличий Embedded и не-Embedded версий, способов их лицензирования, активации, обновления и т.п.
В связи с этим, мы решили сделать небольшой FAQ c ТОП5 вопросов по встраиваемым версиям Windows 10. Надеемся, эта информация будет полезна аудитории разработчиков и поможет сделать правильный выбор версии ОС в зависимости от проекта.
1. Вопрос: Чем отличаются версии Windows 10 Enterprise от Windows 10 IoT Enterprise?
Ответ: Рассмотрим три аспекта отличий: технический, лицензионный и ценовой.
Технически(если рассматривать дистрибутив LTSB), эти версии идентичны. Однако, для IoT-версии можно получить особый ключ (Embedded PKEA), не требующий активации для начала работы (см. вопрос «Нужна ли активация для Windows 10 IoT?»). Ключ для «обычной» Windows 10 Enterprise потребует активации на каждом устройстве.
Также, для Windows 10 IoT Enterprise доступен только один вариант дистрибутива – LTSB (см. ниже вопрос «Что такое дистрибутив LTSB..?»)
Лицензионные же отличия достаточно существенны:
Во-первых, лицензия Windows 10 Enterprise доступна только для конечного пользователя (организации) и является именной лицензией длявнутреннего использования. Ее перепродажа другому лицу невозможна. В то время как лицензия Windows 10 IoT Enterprise не именная, поставляется через Embedded-дистрибуторов сборщикам и производителям устройств, которые могут перепродавать эту лицензию неограниченному числу клиентов вместе с устройством, на которое она установлена (так называемая OEM-лицензия);
Во-вторых, лицензия Windows 10 Enterprise может быть установлена на любое компьютерное устройство, тогда как Windows 10 IoT Enterprise – только на устройство специализированного применения, т.е. «Embedded» или «Встраиваемое» устройство;
В-третьих, в Windows 10 IoT Enterprise существуют 3 варианта лицензирования (3 разных SKU), в зависимости от мощности (модели) процессора, чего нет в настольной Windows 10 Enterprise, где одна редакция и одна цена. Эта эксклюзивная для IoT/Embedded-продуктов схема ценообразования позволяет экономить до 70% от цены настольного аналога, если ваше устройство работает на CPU типа Atom и до 50% на CPU типа Core i3/i5;
В-четвертых, Windows 10 IoT Enterprise поставляется производителям в полной версии, а Windows 10 Enterprise – только в версии «обновление» и, соответственно, потребует наличие установленной предыдущей версии.
Ценовые отличия: В силу оптимизации под узкоспециализированные ПК, лицензии IoT существенно дешевле чем настольные версии и экономически оправданы во всех случаях, где устройство не является «универсальным ПК».
2. Вопрос: Что такое дистрибутив LTSB и чем он отличается от обычного дистрибутива Windows 10.
Ответ: LTSB (в последних версиях — LTSC) – это Long Term Servicing Branch (Long Term Servicing Channel) – особый вариант политики управления обновлениями, позволяющий отказаться от установки функциональных обновлений операционной системы для так называемых «mission critical» устройств, где такое обновление может повлечь за собой незапланированный останов устройства. Функциональные обновления будут доставляться только раз в 2-3 года и ставиться по желанию. Критичные исправления и обновления безопасности могут по-прежнему доставляться в соответствии с установленной для устройств политикой. Для LTSB/LTSC существует отдельный дистрибутив, в котором отсутствуют: Store UX, Cortana, Edge и приложения, обслуживаемые через Store (News, Sports, Finance и т.п.). Embedded-версия Windows 10 IoT Enterprise в действительности является Windows 10 Enterprise LTSB.
3. Вопрос: Как приобрести Windows 10 Enterprise LTSB/LTSC?
Купить Windows 10 Enterprise LTSC возможно двумя путями:
- Конечному пользователю (организации) – у реселлера Microsoft по программам Volume License. Доступно только обновление;
- Производителю или интегратору – у дистрибутора Windows Embedded. Доступна полная версия. В этом случае продукт называется «Windows 10 IoT Enterprise».
4. Вопрос: Требуется ли активация для Windows 10 IoT?
Ответ: В отличие от Windows 10 Enterprise, ключ для Windows 10 IoT Enterprise LTSC (называется Embedded PKEA) вводится на производстве и не требует активации пользователем и подключения к Интернет для начала работы. В дальнейшем, в случае подключении к сети Интернет, система активируется самостоятельно и «бесшумно» без каких-либо видимых уведомлений и изменений в работе устройства. Если подключения не произойдет – устройство будет продолжать работать весь срок службы, не требуя активации.
5. Вопрос: Какие версии Windows 10 IoT существуют?
Ответ: Существуют 2 абсолютно разных продукта с приставкой IoT:
- Windows 10 IoT Enterprise LTSC или CBB (SAC) — описанная выше полноценная Windows Enterprise для применения в широком спектре встраиваемых устройств (в трех вариантах лицензирования в зависимости от модели процессора – Entry, Value, High End);
- Windows 10 IoT Core — бесплатная легкая ОС для простых компактных устройств, с поддержкой ARM-архитектуры (не совместима с классическими Windows-приложениями и устройствами, не имеет собственной графической оболочки);
Для работы с продуктами Windows 10 IoT не требуются специальные средства разработки, как это было с Windows Embedded, но для использования в полной мере всех возможностей «встраивания» и для настройки образа под определенные требования имеется бесплатный инструмент Windows Imaging and Configuration Designer (ICD), о котором мы подробно писали ранее. ICD включен в Windows ADK, который можно загрузить здесь.
Доступны также инструменты для упрощения настройки образа Windows 10 IoT Enterprise от сторонних производителей, такие как ZereOS Embedded Configuration Manager
Канал на YouTube, посвященный Windows Embedded/IoT: www.youtube.com/user/QuartaTechnologies1/videos
Мы готовы ответить и на другие ваши вопросы. Обращайтесь, пишите комментарии!
Получить дополнительные консультации, заказать разработку и приобрести встраиваемые ОС Microsoft вы можете у авторизованного дистрибутора в России и странах СНГ «Кварта Технологии», www.quarta-embedded.ru
Введение
Windows 10 IoT Enterprise 2019 – маркетинговое наименование очередного выпуска Windows 10. Выход данной версии был объявлен в сентябре 2018 года, соответственно имеет версию 1809, 18 – год, 09 – месяц. По новому выпуску Windows 10 1809 написано много статей, но большинство из них посвящено различным «бантикам», «красивостям» и различному функционалу, который востребован в домашних условиях.
В данной статье пойдет речь только о функционале, который может быть востребован среди производителей устройств фиксированного назначения. А именно о новых возможностях режима «Киоск». Также будет затронута тема изменения наименований схем обслуживания редакций Windows корпоративного сегмента.
Старая схема обслуживания с новым названием
Начну с небольшого пояснения, в корпоративном сегменте редакций Windows есть две схемы обслуживания, по которым Windows получает обновления. Схемы обслуживания имеют буквенное обозначение. Сейчас ветки обслуживания называются LTSC и SAC.
LTSC – означает Long Term Servicing Channel (с долгосрочным обслуживанием). Ранее такой канал назывался LTSB – Long Term Servicing Branch, Майкрософт просто изменил название канала обслуживания, само обслуживание осталось прежним.
Также Майкрософт поменял название ветки обслуживания CBB – Current Branch for Business, теперь эта ветка обслуживания называется SAC – Semi-Annual Channel. Опять же поменялось только название.
Но следует упомянуть, что для веток обслуживания LTSC и SAC используются разные дистрибутивы Windows.
Немного о новом режиме киоска в SAC
Как я уже говорил, у LTSC и SAC разные дистрибутивы. В LTSC нет стандартных универсальных приложений и магазина приложений, а в SAC есть. Соответственно, в LTSC нет браузера Edge, а в он SAC есть. Если при настройке киоска выбрать браузер Edge, то теперь доступы два режима:
- Как цифровой знак или интерактивный дисплей
- Как общедоступный браузер
Не буду останавливаться на настройке данных режимов, т.к. настройка очень простая и выполняется в графическом интерфейсе. Просто создайте пользователя, который не состоит в группе «Администраторы», включите для него режим киоска с использованием EDGE и посмотрите на работу данных режимов.
Киоск с множеством приложений
Некоторые думают, что лицензионное использование Windows 10 IoT Enterprise подразумевает работу только одного приложения на устройстве, на самом деле это не так. Устройство должно быть предназначено для выполнения одной бизнес-задачи и у пользователя не должно быть доступа к рабочему столу. Теперь Майкрософт сам дал инструмент для использования множества приложений. Данный режим называется «multi-app kiosk», далее для краткости я буду называть его «мультикиоск». В данной статье мы рассмотрим настройку данного режима с помощью пакета обеспечения и некоторые особенности данного режима.
Немного о режиме «Мультикиоск»
При входе в учетную запись пользователя для которой настроен режим мультикиоска система будет работать в режиме планшета. Меню «Пуск» будет развернуто на весь экран, в котором будут отображаться плитки приложений.
Перечень основных настроек и возможностей режима:
- Настройка для множества пользователей или групп
- Каждому пользователю или группе можно назначить индивидуальные настройки
- Возможность использования универсальных и классических приложений
- Возможность автоматического запуска одного из приложений при входе пользователя в систему
- Работа приложений по белому списку
- Доступ к папкам по белому списку
Стоит обратить внимание на пункт 5. По умолчанию будет разрешена работа только тем приложениям, которые необходимы для работы системы, остальные приложения нужно добавить в список разрешенных. Т.е. теперь не нужно отдельно настраивать AppLocker. Кстати, чтобы избежать конфликта настроек AppLocker’а, в режиме мультикиоска все настроенные правила AppLocker’а действовать не будут.
В пункте 6 обозначена хорошая возможность, но на данный момент возможно дать разрешение на запись только для папки «Downloads». Режим позволяет использовать универсальные и классические приложения. Все настройки режима указываются в XML-файле, в котором также можно указать настройки для киоска с одним приложением.
А теперь попробуем все это настроить…
Что нам понадобится…
- В первую очередь нам понадобится сама система, которая поддерживает режим мультикиоска. Здесь можно скачать демонстрационную версию
- Инструкция по настройке мультикиоска
- Любой XML редактор
- Для применения настроек мульткиоска:
- Для способа №1 — ICD, который входит в состав ADK. ADK можно скачать здесь
- Для способа №2 – утилита PsExec. Утилиту можно скачать здесь
Он сказал – «Поехали!»
Все опыты я буду проводить на Windows 10 IoT Enterprise 1809 LTSC x32 коммерческая версия, а не демонстрационная. Система будет без активации т.к. отсутствие активации не сказывается на функционале системы. Я взял 32 бита только потому, что она занимает меньше места и работать с образами системы будет быстрее.
Шаг 1 – установка
Установка Win 10 IoT Enterprise ничем не отличается от установки Win 10 Enterprise, поэтому весь процесс установки описывать не буду, скажу лишь о некоторых нюансах.
На всякий случай напомню, не ставьте систему поверх установленной. Когда установщик спросит о месте установки системы удалите все разделы на будущем системном диске и укажите неразмеченный диск.
Ставим систему без подключения к интернету, чтобы система не подтянула ничего лишнего.
Т.к. мы будем создавать резервные образа системы и для этого будем ее запечатывать в режиме аудита, то можно сэкономить немного времени загрузив систему в режиме аудита сразу после установки. Для этого, когда система у Вас попросит выбрать регион «Let’s start with region. Is this right» просто нажмите «Ctrl+Shift+F3».
Шаг 2 – создаем образ системы
Т.к. мы будем издеваться над системой пробовать различные новые настройки, то не исключено что что-то пойдет не так и нужно будет вернуть систему в исходное состояние. А для быстрого возврата в исходное состояние нужно создать образ системы. Единственное что я сделаю, это скопирую «джентльменский набор» – скрипт и файл ответов. Все файлы у меня находятся на в папке «Sysprep», которую я скопирую в корень системного диска. И естественно, я поделюсь с Вами данным «джентльменским набором».
Sysprep.bat – для запечатывания системы.
@echo off
chcp 1251>nul
net session>nul 2>nul
if %errorLevel% neq 0 (powershell -command "Start-Process "%~s0" -Verb RunAs"&exit)
tasklist /fi "ImageName eq sysprep.exe" | find /i "sysprep.exe"
if %errorlevel% lss 1 (taskkill /im sysprep.exe)
set AdminName=Admin
net user %AdminName%>nul 2>nul
if %errorLevel% neq 0 (call :AddAdmin "%AdminName%")
if %errorLevel% neq 0 (call :ShowMessage "‡‡‡Ошибка создания новой учетной записи администратора "%AdminName%"‡‡Нажмите любую клавишу для завершения работы скрипта"&pause>nul&exit)
pushd "%~dp0"
cls
call :ShowMessage ‡‡‡‡‡‡‡‡‡‡
echo 1 - Запечатать систему в режиме аудита
echo 2 - Запечатать систему в режиме приветствия
:Select
set /p Choice="Введите номер пункта меню: "
if "%Choice%"=="1" (goto Audit)
if "%Choice%"=="2" (goto OOBE)
echo.&echo Выбрано недопустимое значение.&goto Select
exit
:Audit
call :ShowMessage "‡‡‡‡‡Запечатывание системы в режиме аудита"
reg add HKLMSoftwareMicrosoftWindowsCurrentVersionRun /v KillSysprep /t REG_SZ /d "taskkill /im sysprep.exe" /f
%SYSTEMROOT%System32Sysprepsysprep.exe /audit /generalize /shutdown /quiet
goto :eof
:OOBE
call :ShowMessage "‡‡‡‡‡Запечатывание системы в режиме приветствия"
reg delete HKLMSoftwareMicrosoftWindowsCurrentVersionRun /v KillSysprep /f
powershell -command "(Get-Content -path 'Unattend.xml' -Raw).Trim() -replace 'Architecture=""".+?"""','Architecture="""%PROCESSOR_ARCHITECTURE%"""' | Set-Content -path 'Unattend.xml'"
%SYSTEMROOT%System32Sysprepsysprep.exe /oobe /generalize /shutdown /quiet /unattend:Unattend.xml
goto :eof
:AddAdmin
setlocal
set UserName=%~1
if not defined UserName (echo Не указано имя пользователя&endlocal&exit /b 1)
call :GetGroupName "S-1-5-32-544" AdminGroup
if not defined AdminGroup (endlocal&exit /b 2)
call :GetGroupName "S-1-5-32-545" UserGroup
if not defined UserGroup (endlocal&exit /b 3)
net user %UserName% /add
wmic useraccount where "Name='%UserName%'" set PasswordExpires=False>nul
net localgroup %AdminGroup% %UserName% /add
net localgroup %UserGroup% %UserName% /delete
endlocal&exit /b 0
goto :eof
:GetGroupName
if "%~1"=="" (echo Не указан SID группы&goto :eof)
set %2=
for /f "tokens=2 delims= " %%i in ('whoami /groups /fo table^|find "%~1"') do set %2=%%i
if not defined %2 (echo Ошибка определения имени группы по SID'у "%~1")
goto :eof
:ShowMessage
setlocal enabledelayedexpansion
set String=%~1
if not defined String (echo.&setlocal disabledelayedexpansion&goto :eof)
set /a ConCols=120 & set /a Num=1
set "String[!Num!].str=%String:‡=" & set /a Num+=1 & set "String[!Num!].str=%"
for /l %%a in (1,1,%Num%) do (
for /l %%b in (0,1,%ConCols%) do if "!String[%%a].str:~%%b!" == "" (set "String[%%a].str= !String[%%a].str! "&set /a String[%%a].len-=1) else (set /a String[%%a].len+=0||set /a String[%%a].len=0)
if not defined String[%%a].str (set String[%%a].str= )
if not !String[%%a].len! equ 0 (call set String[%%a].str=%%String[%%a].str:~,!String[%%a].len!%%)
if "!String[%%a].str: =!"=="" (echo.) else (echo !String[%%a].str!))
setlocal disabledelayedexpansion
goto :eof
При запуске скрипт будет проверять наличие учетной записи «Admin» и создавать ее при ее отсутствии. Учетная запись будет добавлена в группу «Администраторы».
Unattend.xml – файл ответов для sysprep’а.
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="specialize">
<component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f</Path>
<Order>1</Order>
<Description>Dont show key page</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path>
<Order>2</Order>
<Description>Dont make account</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>cmd.exe /c rd %systemdrive%Sysprep /s /q</Path>
<Order>3</Order>
<Description>Del Folder</Description>
</RunSynchronousCommand>
</RunSynchronous>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Enabled>true</Enabled>
<Username>Admin</Username>
</AutoLogon>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-US; ru-RU</InputLocale>
<SystemLocale>ru-RU</SystemLocale>
<UILanguage>ru-RU</UILanguage>
<UILanguageFallback></UILanguageFallback>
<UserLocale>ru-RU</UserLocale>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
</component>
</settings>
</unattend>
При запечатывании в режиме аудита скрипт будет добавлять в реестр команду на завершение процесса «sysprep.exe» чтобы не закрыть окно sysprep’а каждый раз вручную. При запечатывании в режиме приветствия скрипт удалит из реестра команду для закрытия окна и сам поменяет значение архитектуры в файле ответов на текущую. В файле ответов содержатся параметры для загрузки системы без участия пользователя и команда для удаления папки «Sysprep» в корне системного диска.
Теперь я запечатаю систему в режиме аудита с помощью «Sysprep.bat» и сниму образ системы. Снимать образ системы я буду с помощью DISM’а и буду снимать образ только системного тома. Если Вы будете снимать образ только системного тома, а не всего диска, то не забывайте копировать содержимое каталога «WindowsSystem32Recovery» на первый том в папку «RecoveryWindowsRE» после разворачивания системы. Это нужно будет сделать до загрузки ОС т.к. после загрузки ОС каталог «WindowsSystem32Recovery» уже будет пустым.
Шаг 3 – русификация системы
Языковой пакет можно установить без подключения к интернету, если этот пакет у Вас есть. Если нет, то система сама его загрузит из интернета, когда Вы добавите язык в настройках. Только не нужно брать языковой пакет от предыдущих версий ОС. Для Windows 10 1809 должен быть языковой пакет именно для Windows 10 1809.
Майкрософт следует своему плану – постепенному переводу настроек из классического меню в новое, поэтому в классической панели управления Вы уже не найдете настроек для изменения языка и установки языкового пакета. Данные настройки теперь только в параметрах системы.
В режиме аудита Вы можете столкнуться с проблемой открытия параметров системы из меню «Пуск», для открытия параметров системы выполните команду – «ms-settings:», обратите внимание на двоеточие в конце команды, без него команда не будет работать. После однократного открытия параметров системы с помощью данной команды, его можно будет открывать с помощью графического меню.
Но в параметрах системы Вы можете установить языковой пакет если система подключена к интернету, там нет возможности выбора установки языкового пакета из локального файла.
Не буду описывать процесс локализации системы т.к. это существенно утяжелит статью, тем более что процесс локализации подробно описан здесь. Но хотелось бы обратить Ваше внимание на особенность изменения языка системы после установки языкового пакета с помощью консоли. Данная особенность описана в той же вики, на которую я дал ссылку ранее, в подразделе «Добавление языка в список языков».
Я установлю языковой пакет без подключения к интернету.
После полной локализации системы обязательно создайте образ системы.
Шаг 4 – установка необходимых приложений
Т.к. в системах LTSB и LTSC нет магазина приложений, то установка приложений из «Microsoft Store» вызывает некоторые трудности, а именно – загрузка приложения. Для загрузки приложений компания «Adguard» сделала очень удобный сервис – «Adguard Store», с помощью которого можно получить временные ссылки на загрузку приложений и их компонентов.
Для установки приложения Вам понадобятся файлы с расширениями «Appx» и «AppxBundle». Перед установкой самого приложения необходимо установить его компоненты. Как правило компоненты от приложения можно интуитивно отличить по названию файла.
Чтобы не делать статью слишком большой не буду подробно описывать процесс установки приложений, тем более что по установке есть подробная инструкция. Но добавлю еще один способ установки приложений в текущую учетную запись. Приложения можно установить с помощью программы «App Installer», но для установки приложений потребуется подключение к интернету, зато приложения можно будет установить двойным щелчком мыши и вам не понадобятся его компоненты, все необходимые компоненты загрузит и установит «App Installer».
И небольшое напоминание, при установке приложения в текущую учетную запись нельзя будет запечатать систему. Как установить приложения чтобы была возможность запечатать систему смотрите в вышеупомянутой инструкции. А для проверки работы мультикиоска вполне хватит уже имеющихся приложений.
Шаг 5 – создание файла настройки для мультикиоска
Вот мы и добрались до самого интересного – до настройки режима киоска. Смотрим в инструкцию по настройке и видим. Прежде всего нам понадобится создать конфигурационный XML-файл, полный пример которого можно посмотреть здесь.
Начнем с настройки расположения плиток. Самый простой способ создания XML-конфигурации настройки плиток – экспорт их текущего состояния.
Первым делом добавим в меню «Пуск» плитки тех приложений, которые нам нужны. Вызываем поиск «Win+s», находим нужное приложение, нажимаем на нем правой кнопкой мыши и выбираем пункт «Закрепить на начальном экране».
Я закрепил следующие приложения:
- Блокнот
- Калькулятор
- Internet Explorer
- Paint
- WordPad
- Параметры
- Безопасность Windows
Последние два приложения были закреплены т.к. в стандартной поставке LTSC других универсальных приложений просто нет. Обратите внимание, что плитки классических приложений ссылаются на ярлыки. Теперь путем передвижения плиток непосредственно в меню «Пуск» я разделю закрепленные плитки на две группы. Для создания новой группы плиток перетащите плитку существенно выше или ниже других плиток, при этом высветиться интуитивно понятный разделитель. Вы можете назвать группы по своему усмотрению, для этого разместите курсор мыши выше группы, а когда появится надпись – «Назвать группу» нажмите левой кнопкой мыши. Первую группу я назову «Настройки», в нее войдут плитки «Параметры» и «Безопасность Windows». Вторую группу я назову «Офисные приложения», в которую войдут все остальные плитки. Кстати, можно перемещать целиком группы плиток, перетаскивая их за две полоски, которые находятся справа вверху от названия группы.
Т.к. на плитке «Безопасность Windows» не умещается название полностью, я изменю ее размер на «Широкий». Для изменения размера плитки нужно нажать на плитке правой кнопкой мыши и выбрать пункт «Изменить размер».
После настройки экспортируем текущее состояние, выполняем команду в среде PowerShell – «Export-StartLayout – path C:SysprepStartLayout.xml».
Дальше проще всего не создавать файл настроек самостоятельно, а отсюда взять пример файла настроек – нажимаем на кнопку «Copy», вставляем содержимое в блокнот и сохраняем как «MultiAppKiosk.xml». Теперь меняем настройки на свои. Для изменения настроек прикрепленных плиток копируем весь блок «StartLayoutCollection» из «StartLayout.xml» в «MultiAppKiosk.xml». Чтобы добавить приложения в разрешенные необходимо вставить идентификаторы универсальных приложений в раздел «AllowedApps» и в этот же блок добавить полный путь к исполняемым файлам классических приложений, который прописан в свойствах ярлыках, на которые ссылаются плитки. Для быстрого перехода к ярлыку, нажмите правой кнопкой мыши на закрепленной плитке и пройдите по меню «Дополнительно > Перейти к расположению файла». Обратите внимание, для указания ID универсального приложения используется параметр «AppUserModelId», а для указания полного пути к классическому приложению используется параметр «DesktopAppPath». И еще один маленький нюанс, если Вы планируете использовать IE в системе x64, то в перечне разрешенных приложений необходимо указать два пути для исполняемого файла «Program FilesInternet Exploreriexplore.exe» и «Program Files (x86)Internet Exploreriexplore.exe».
Доступ к папкам я давать не буду, поэтому удаляю секцию «FileExplorerNamespaceRestrictions».
Отображение панели задач мне не помешает, поэтому в секции «Taskbar» оставляю все как есть.
В примере прописано два профиля, но у меня будет только один профиль, поэтому секцию с вторым профилем можно удалить. Перед удалением обратите внимание на пример автоматического запуска приложения с аргументами.
В секции «Configs» учетные записи привязаны к профилям, обратите внимание, что к одному профилю можно привязать множество учетных записей. Но т.к. меня интересует только одна учетная запись, то я удалю все привязки кроме первой – блоки «Config». В оставшейся привязке пропишу имя пользователя «User».
У меня получился вот такой файл с параметрами
MultiAppKiosk.xml
<?xml version="1.0" encoding="utf-8" ?>
<AssignedAccessConfiguration
xmlns="http://schemas.microsoft.com/AssignedAccess/2017/config"
xmlns:rs5="http://schemas.microsoft.com/AssignedAccess/201810/config"
>
<Profiles>
<Profile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}">
<AllAppsList>
<AllowedApps>
<App AppUserModelId="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
<App AppUserModelId="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
<App DesktopAppPath="%windir%system32notepad.exe" />
<App DesktopAppPath="C:Program FilesInternet Exploreriexplore.exe" />
<App DesktopAppPath="%windir%system32win32calc.exe" />
<App DesktopAppPath="%windir%system32mspaint.exe" />
<App DesktopAppPath="%ProgramFiles%Windows NTAccessorieswordpad.exe" />
</AllowedApps>
</AllAppsList>
<StartLayout>
<![CDATA[<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
<LayoutOptions StartTileGroupCellWidth="6" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6">
<start:Group Name="Настройки">
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
<start:Tile Size="4x2" Column="2" Row="0" AppUserModelID="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
</start:Group>
<start:Group Name="Офисные приложения">
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesWordpad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesNotepad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesCalculator.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesPaint.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesInternet Explorer.lnk" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
]]>
</StartLayout>
<Taskbar ShowTaskbar="true"/>
</Profile>
</Profiles>
<Configs>
<Config>
<Account>User</Account>
<DefaultProfile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}"/>
</Config>
</Configs>
</AssignedAccessConfiguration>
Когда будете делать свои XML-файлы настройки не забывайте, что у каждого профиля должен быть уникальный ID, причем не только в пределах одного XML-файла, а в одной ОС. Т.е. в идеале чтобы не запутаться можно каждый раз создавать новый идентификатор, это можно сделать в среде PowerShell с помощью команды «[guid]::NewGuid()». И обязательно сохраняйте файл в кодировке «UTF-8», если файл будет сохранен в кодировке «ANSI», то при сборке пакета подготовки получите ошибку если в XML-файле будет кириллица.
Шаг 6 – применение настроек мультикиоска
Рассмотрим два способа применения настроек, описанных в конфигурационном файле. Первый – с помощью пакета подготовки, который нужно создавать в ICD. Для кого-то, возможно, такой способ будет более привычным. Второй – с использованием «MDM Bridge WMI Provider», этот способ мне показался более удобным.
Способ №1
У кого нет ICD, скачиваем ADK и устанавливаем. Установка ADK очень простая, набор компонентов можно оставить по умолчанию.
Запускаем ICD, нажимаем на плитку «Дополнительная подготовка», указываем имя и папку проекта и нажимаем «Далее». В следующем окне выбираем «Все выпуски Windows для настольных компьютеров» и нажимаем «Далее». Импорт пакета подготовки можно пропустить, нажимаем «Готово».
Раскрываем выпадающее меню «Параметры среды выполнения», далее раскрываем подменю «AssignedAccess» и выбираем пункт «MultiAppAssignedAccessSettings». В верхней части средней секции окна ICD нажимаем кнопку «Обзор» и указываем расположение XML-файла с настройками. На всякий случай можно сохранить проект нажав «Ctrl+s». В левой верхней части ICD выбираем «Экспорт» в выпадающем меню выбираем пункт «Пакет подготовки». В качестве владельца выбираем «ИТ-администратор» все остальные вопросы можно пропустить, нажимая «Далее» и в конце нажимаем «Сборка» и «Готово».
В установленной системе не забываем создать пользователя «User», его нельзя добавлять в группу «Администраторы» иначе мультикиоск работать не будет. Я создал пользователя в оснастке «Управление компьютером» с неограниченным сроком действия пароля.
Теперь запускаем пакет подготовки в ранее установленной системе. После применения пакета подготовки изменится меню пуск и у администратора. В левом столбце пуска должны исчезнуть кнопки: «Документы», «Изображение», «Параметры». Если меню пуск не изменилось, то что-то пошло не так. Установленный пакет можно удалить если открыть окно «Параметры > Учетные записи > Доступ к учетной записи места работы или учебного заведения > Добавление или удаление пакета подготовки».
Если меню пуск изменилось, то настройки применены к системе, заходите под пользователем, для которого настроен мультикиоск и посмотрите на результат.
Способ №2
Применение настроек с помощью «MDM Bridge WMI Provider» описано здесь. Удобство данного способа в гибкости использования и возможности избавиться от множества ручных операций, которые нужны для создания пакета подготовки. Здесь каждый для себя может сделать решение, которое будет удобно именно ему. Я для себя сделал вот такую пару скриптов.
MiltiKiosk.bat – скрипт для запуска
@echo off
chcp 1251>nul
if not exist "%~dp0psexec.exe" call :ShowMessage "‡‡‡‡‡‡‡‡‡‡‡‡‡Для работы скрипта необходим файл psexec.exe‡‡Для завершения работы скрипта нажмите любую клавишу"&pause>nul&exit
net session>nul 2>nul
if %errorLevel% neq 0 (powershell -command "Start-Process "%~s0" -Verb RunAs"&exit)
for /f "tokens=2 delims==" %%i in ('wmic useraccount where "Name='%UserName%'" get SID /value^|find "SID"') do set SID=%%i
reg add HKU%SID%SoftwareSysinternalsPsExec /v EulaAccepted /t REG_DWORD /d 1 /f
for /f %%i in ('dir "%~dp0%~n0*.ps1" /b /o:n') do set PSFilePath=%~dp0%%i
if not defined PSFilePath (echo Не найдено PS файлов с началом названия - "%~n0"&pause&exit)
set PSFilePath=%PSFilePath: =` %
"%~dp0psexec.exe" -i -s powershell -command "Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Unrestricted -Command %PSFilePath%'"
exit
:ShowMessage
setlocal enabledelayedexpansion
set String=%~1
if not defined String (echo.&setlocal disabledelayedexpansion&goto :eof)
set /a ConCols=120 & set /a Num=1
set "String[!Num!].str=%String:‡=" & set /a Num+=1 & set "String[!Num!].str=%"
for /l %%a in (1,1,%Num%) do (
for /l %%b in (0,1,%ConCols%) do if "!String[%%a].str:~%%b!" == "" (set "String[%%a].str= !String[%%a].str! "&set /a String[%%a].len-=1) else (set /a String[%%a].len+=0||set /a String[%%a].len=0)
if not defined String[%%a].str (set String[%%a].str= )
if not !String[%%a].len! equ 0 (call set String[%%a].str=%%String[%%a].str:~,!String[%%a].len!%%)
if "!String[%%a].str: =!"=="" (echo.) else (echo !String[%%a].str!))
setlocal disabledelayedexpansion
goto :eof
MiltiKiosk_Ver.12.ps1 – основной скрипт
Function ConvertEncoding ([string]$From, [string]$To) {
Begin{$encFrom = [System.Text.Encoding]::GetEncoding($From);$encTo = [System.Text.Encoding]::GetEncoding($To)}
Process{$bytes = $encTo.GetBytes($_);$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes);$encTo.GetString($bytes) -replace [char]0, ''}
}
Function ShowMessage ($Message='', $Align=0) {
Try {$Align = [decimal]$Align} Catch {Return 'Для параметра Align может быть указано только число' | ConvertEncoding 'windows-1251' -To 'UTF-16'}
if ($Message -is [int]) {for ($i=1; $i -le $Message; $i++) {Write-Host}; Return}
if ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$Message = $Message | ConvertEncoding 'windows-1251' -To 'UTF-16'}
if ($Message -is [string]) {[array] $Message = $Message}
foreach ($String in $Message) {
Try {$String = [int]$String} Catch {}
if ($String -is [int]) {for ($i=1; $i -le $String; $i++) {Write-Host}; continue}
if ($Host.UI.RawUI.BufferSize.Width -gt $String.Length) {
if ($Align -eq 0) {Write-Host $String
} else {Write-Host ("{0}{1}" -f (' ' * (([Math]::Max(0, $Host.UI.RawUI.BufferSize.Width / $Align) - [Math]::Floor($String.Length / $Align)))), $String)}
} else {Write-Host $String}
}
}
$script:NameSpace="rootcimv2mdmdmmap"
$script:ClassName="MDM_AssignedAccess"
$script:MultiAppKiosk = Get-CimInstance -Namespace $NameSpace -ClassName $ClassName
if (-not $MultiAppKiosk) {ShowMessage -Message (3, 'Ошибка получения объекта настроек', 2, 'Нажмите "Enter" для завершения рабты скрипта') -Align 2; Read-Host; Exit}
Function MainMenu() {
ShowMessage (13, ' 0 - Выход', ' 1 - Выбрать XML-файл для установки', ' 2 - Показать текущую конфигурацию мультикиоска', ' 3 - Удалить настройки мультикиоска', 1)
$local:PromptText = 'Выберите действие'
if ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$PromptText = $PromptText | ConvertEncoding 'windows-1251' -To 'UTF-16'}
$local:Selections = 1..2
While ($true) {
$Select = Read-Host -Prompt $PromptText
Switch ($Select) {
0 {exit}
1 {XMLSelection}
2 {ShowMessage -Message (1, 'Начало конфигурации') -Align 2; Write-Host $MultiAppKiosk.Configuration; ShowMessage -Message ('Конец конфигурации', 1, 'Для возврата в меню нажмите "Enter"', 1) -Align 2; Read-Host}
3 {$MultiAppKiosk.Configuration = $Null; Set-CimInstance -CimInstance $MultiAppKiosk; ShowMessage -Message (1, 'Выполнена команда удаления настроек', 1) -Align 2}
DEFAULT {ShowMessage 'Выбрано недопустимое значение'}
}
if ($Selections -contains $Select) {Clear-Host; ShowMessage (15, ' 0 - Выход', ' 1 - Выбрать XML-файл для установки', ' 2 - Показать текущую конфигурацию мультикиоска', ' 3 - Удалить настройки мультикиоска', 1)}
}
}
Function XMLSelection() {
Clear-Host
if (!(Test-Path -Path $PSScriptRoot'XML')) {ShowMessage -Message (13, 'Не найден каталог', $('"'+$PSScriptRoot+'XML"'), 1, 'Нажмите "Enter" для возврвта в предыдущее меню') -Align 2; Read-Host; Return}
$local:XMLList = @()
$XMLList += Get-ChildItem -Path $PSScriptRoot'XML' -name -filter '*.xml'
if ($XMLList.Count -eq 0) {ShowMessage -Message (13, 'Не найдено XML-файлов в каталоге', $('"'+$PSScriptRoot+'XML"'), 1, 'Нажмите "Enter" для возврвта в предыдущее меню') -Align 2; Read-Host; Return}
[int]$local:Indent = 13 - $XMLList.Count / 2; if ($Indent -lt 1) {$Indent = 1}
ShowMessage ($Indent, ' 0 - Вернуться в предыдущее меню')
for ($i=0; $i -le $XMLList.GetUpperBound(0); $i++) {Write-Host $(' '+($i+1)+' - '+$XMLList[$i])}
Write-Host
$local:PromptText = 'Выберите файл для установки'
if ([System.Text.Encoding]::Default.WindowsCodePage -eq 1252) {$PromptText = $PromptText | ConvertEncoding 'windows-1251' -To 'UTF-16'}
$local:Selections = 1..$XMLList.Count
$local:BackToPrevMenu = 0
While ($BackToPrevMenu -eq 0) {
$Select = Read-Host -Prompt $PromptText
Switch ($Select) {
0 {$BackToPrevMenu = 1}
{$Selections -contains $Select} {ShowMessage $('Дана команда на применение настроек из файла '+$XMLList[$Select-1]);
$local:Config = (Get-Content -encoding UTF8 -path $($PSScriptRoot+'XML'+$XMLList[$Select-1]) -Raw).Trim()
$local:GUIDs = [regex]::matches($Config, '{.+?}') | select -ExpandProperty Value | Get-Unique
foreach ($GUID in $GUIDs) {$Config = $Config -replace $(''+$GUID),$('{'+[guid]::NewGuid()+'}')}
$Config = $Config -replace '&','&' -replace '<','<' -replace '>','>' -replace "'",''' -replace '"','"'
$MultiAppKiosk.Configuration = $Config
Set-CimInstance -CimInstance $MultiAppKiosk
}
DEFAULT {ShowMessage ('Выбрано недопустимое значение')}
}
}
}
MainMenu
Если вы хотите использовать мое решение, то сохраните в одну папку вышеуказанные скрипты с их оригинальными именами и в эту же папку положите файл «PsExec.exe». В этой же папке создайте папку «XML» и скопируйте в нее XML-файлы для настройки мультикиоска. Я буду использовать тот же файл, что и в первом способе.
MultiAppKiosk.xml
<?xml version="1.0" encoding="utf-8" ?>
<AssignedAccessConfiguration
xmlns="http://schemas.microsoft.com/AssignedAccess/2017/config"
xmlns:rs5="http://schemas.microsoft.com/AssignedAccess/201810/config"
>
<Profiles>
<Profile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}">
<AllAppsList>
<AllowedApps>
<App AppUserModelId="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
<App AppUserModelId="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
<App DesktopAppPath="%windir%system32notepad.exe" />
<App DesktopAppPath="C:Program FilesInternet Exploreriexplore.exe" />
<App DesktopAppPath="%windir%system32win32calc.exe" />
<App DesktopAppPath="%windir%system32mspaint.exe" />
<App DesktopAppPath="%ProgramFiles%Windows NTAccessorieswordpad.exe" />
</AllowedApps>
</AllAppsList>
<StartLayout>
<![CDATA[<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
<LayoutOptions StartTileGroupCellWidth="6" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6">
<start:Group Name="Настройки">
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="WINDOWS.IMMERSIVECONTROLPANEL_CW5N1H2TXYEWY!MICROSOFT.WINDOWS.IMMERSIVECONTROLPANEL" />
<start:Tile Size="4x2" Column="2" Row="0" AppUserModelID="Microsoft.Windows.SecHealthUI_cw5n1h2txyewy!SecHealthUI" />
</start:Group>
<start:Group Name="Офисные приложения">
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesWordpad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesNotepad.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesCalculator.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%MicrosoftWindowsStart MenuProgramsAccessoriesPaint.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%APPDATA%MicrosoftWindowsStart MenuProgramsAccessoriesInternet Explorer.lnk" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
]]>
</StartLayout>
<Taskbar ShowTaskbar="true"/>
</Profile>
</Profiles>
<Configs>
<Config>
<Account>User</Account>
<DefaultProfile Id="{9A2A490F-10F6-4764-974A-43B19E722C23}"/>
</Config>
</Configs>
</AssignedAccessConfiguration>
Немного об особенностях скрипта. Скрипт рассчитан на использование XML-файлов с кодировкой «UTF8», если вы хотите использовать кодировку «ANSI», то из параметра чтения файла уберите параметр «encoding UTF8». В папку «XML» необходимо размещать XML-файлы без замены символов, скрипт сам заменит спецсимволы на соответствующие обозначения. Чтобы не запутаться в GUID’ах привязки пользователей к профилям вы можете просто указывать номер или имя пользователя в фигурных скобках, все содержимое в фигурных скобках будет заменено на GUID’ы.
Использовать скрипт очень просто, запускаете и выбираете необходимый пункт. Для изменения текущей конфигурации на новую не обязательно удалять текущую, она будет перезаписана. Не забывайте создавать пользователей, которые прописаны в конфигурационном файле.
При просмотре текущей конфигурации мультикиоска в той же сессии, в которой она была применена, вместо спецсимволов будут отображены сочетания замещающих символов. После смены сессии (перезапуска скрипта), все спецсимволы будут отображены в оригинальном виде.
Шаг 7 – запечатывание системы
Мультикиоск работает, ну вот и все, казалось бы…
Если все идет по плану, значит вы чего-то не замечаете.
Не забываем, что нам еще нужно переводить систему из режима аудита в режим приветствия. Ну мы же к этому готовы, запускаем «Sysprep.bat», выбираем пункт 2, система запечатывается. Включаем устройство, система загружается, входим в учетную запись пользователя для которого настроен мультикиоск и не можем войти. После надписи «Добро пожаловать» появляется надпись «Выход из системы».
Сначала я хотел описать только решение проблемы, но позже решил описать шаги по выявлению проблемы и поиску наиболее простого решения т.к. наверняка многих читающих будут терзать смутные сомнения – «А если вот так…». Думаю, что описание различных экспериментов сэкономит вам значительную часть времени при желании найти другое решение. Чтобы информация была максимально точной, и чтобы лишний раз убедиться в отсутствии каких-либо ошибок, описание экспериментов я буду делать в формате «сделал – записал». Т.е. я проделаю описываемые эксперименты еще раз.
Эксперименты
Что же у нас получилось. В системе две учетные записи:
«Admin» – в группе «Администраторы»
«User» – в группе «Пользователи»
В режиме аудита мультикиоск работал, запечатали – не работает.
Эксперимент 1
Удаляем установленный пакет подготовки, в оснастке «Управление компьютером» удаляем пользователя «User» и создаем нового пользователя с именем «User», применяем пакет подготовки, заходим в учетную запись «User» – не работает. Заходим под именем «Admin», удаляем пользователя «User» из группы «Пользователи», добавляем в группу «Администраторы», заходим под именем «User» – не работает. Заходим под именем «Admin», удаляем пакет подготовки с мультикиоском, заходим под именем «User» – получилось войти, но естественно режим мультикиоска не работает т.к. был удален пакет подготовки.
Эксперимент 2
Заливаем образ системы – русифицированный в режиме аудита.
ОС загрузилась, нажимаем «Win+r», т.к. окно sysprep’а у нас закрылось автоматически выполняем команду «sysprep», в открывшемся окне запускаем «sysprep». Настройки sysprep’a в окне: «Переход в окно приветствия системы (OOBE)», «Подготовка к использованию», «Перезагрузка». Жмем «ОК» и ждем приветствия ОС. Отвечаем на вопросы при первой загрузке системы: «Continue in selected language?» – «русский»; регион – Россия; раскладка клавиатуры – Русская; добавить вторую раскладку клавиатуры – пропустить; «Давайте подключим вас к сети» – «Пока пропустить»; подключитесь к интернету – нет; лицензионное соглашение – принять; «Кто будет использовать этот компьютер» – «Test»; создание пароля – оставляю поле пустым; удобная работа на разных устройствах – нет; параметры конфиденциальности – принять. ОС загрузилась, в оснастке «Управление компьютером» создаем пользователя с именем «User», добавляем пакет подготовки. Результат – не работает.
Эксперимент 3
Заливаем образ системы – русифицированный в режиме аудита.
ОС загрузилась, подключаем систему к инету, выполняем команду «gpedit.msc» и в разделе «Центр обновлений Windows» включаем параметр «Включить рекомендуемые обновления через автоматическое обновление», на всякий случай перезагружаемся. В центре обновлений жмем «Проверить наличие обновлений» и перезагружаемся до тех пор, пока не будут установлены все обновления. Отключаем систему от интернета. Запускаем «sysprep» в графическом режиме и повторяем все действия, которые описаны в предыдущем шаге с запуска утилиты «sysprep» до добавления пакета подготовки. Результат – не работает.
Эксперимент 4
Заливаем образ системы – англоязычный в режиме аудита.
Запускаем «sysprep» в графическом режиме, запечатываем ОС с теми же параметрами что и во время эксперимента 2. При первой загрузке системы выбираем те же параметры что и в эксперименте 2, за исключением региональных и языковых параметров т.к. русского языка нет. Точно так же создаем пользователя «User» и добавляем пакет подготовки. Результат – работает. Т.е. проблема связана с локализацией.
Эксперимент 5
Заливаем образ системы – русифицированный в режиме аудита.
В оснастке «Управление компьютером» создаем пользователя «User», добавляем пакет подготовки, заходим в учетную запись «User», мультикиоск работает.
Выходим из учетной записи, заходим под учетной записью «Admin». Запускаем PowerShell с правами администратора, выполняем команду «Dism /online /Get-Intl» и видим «Язык пользовательского интерфейса по умолчанию: en-US».
Загружаемся с флэшки в WinPE, развернутая ОС у меня на диске E. Выполняем команду «Dism /image:E: /Set-UILang:ru-ru». Смотрим на результат, выполняем «Dism /image:E: /Get-Intl» и видим «Default system UI language: ru-RU».
Загружаемся в систему, входим в учетную запись «User», мультикиоск не работает.
Для четкой фиксации причинно-следственной связи появления проблемы попробуем еще раз сделать мультикиоск рабочим и нерабочим.
Загружаемся с флэшки в WinPE, развернутая ОС у меня на диске E. Выполняем команду «Dism /image:E: /Set-UILang:en-us». Смотрим на результат, выполняем «Dism /image:E: /Get-Intl» и видим «Default system UI language: en-US».
Загружаемся в систему, входим в учетную запись «User», мультикиоск работает.
Загружаемся с флэшки в WinPE, развернутая ОС у меня на диске E. Выполняем команду «Dism /image:E: /Set-UILang:ru-ru». Смотрим на результат, выполняем «Dism /image:E: /Get-Intl» и видим «Default system UI language: ru-RU».
Загружаемся в систему, входим в учетную запись «User», мультикиоск не работает.
Т.е. можно увидеть четкую зависимость работоспособности киоска от значения языка пользовательского интерфейса по умолчанию. Может есть еще какие-то факторы, влияющие на работоспособность мультикиоска?
Эксперимент 6
Для чистоты эксперимента перезаливаем систему. Заливаем образ системы – русифицированный в режиме аудита.
Запускаем «sysprep» в графическом режиме, запечатываем ОС с теми же параметрами что и во время эксперимента 2. Ждем приветствия ОС и отвечаем на вопросы: «Continue in selected language?» – «English (United States)»; регион – Россия; раскладка клавиатуры – Русская. Далее все параметры выбраны как и в эксперименте 2.
Смотрим параметры значения языка пользовательского интерфейса по умолчанию. Выполняем команду «Dism /online /Get-Intl» и видим «Default system UI language: en-US». В оснастке «Управление компьютером» создаем пользователя «User», добавляем пакет подготовки, заходим в учетную запись «User», мультикиоск работает.
Пробуем сломать киоск путем изменения языка пользовательского интерфейса по умолчанию. Заходим в пользователя «Test», который был создан при первой загрузке системы и включаем для него автоматический вход чтобы система не загружалась в учетную запись «User», сразу. Выполняем «netplwiz», выбираем пользователя «Test», снимаем флажок «Требовать ввод имени пользователя и пароля» и применяем параметры.
Загружаемся с флэшки в WinPE. Выполняем команду «Dism /image:E: /Set-UILang:ru-ru». Смотрим на результат, выполняем «Dism /image:E: /Get-Intl» и видим «Default system UI language: ru-RU».
Загружаемся в систему, пытаемся войти в учетную запись «User», мультикиоск работает. Т.е. его не получается сломать. А можно ли его таким образом заставить работать?
Эксперимент 7
Заливаем образ системы – русифицированный в режиме аудита.
Запускаем «Sysprep.bat», выбираем пункт 2. Загружаемся в систему, в оснастке «Управление компьютером» создаем пользователя «User», добавляем пакет подготовки, заходим в учетную запись «User», мультикиоск не работает.
Загружаемся с флэшки в WinPE. Выполняем команду «Dism /image:E: /Set-UILang:en-us». Смотрим на результат, выполняем «Dism /image:E: /Get-Intl» и видим «Default system UI language: en-US».
Загружаемся в систему, пытаемся войти в учетную запись «User», мультикиоск не работает.
Получается, что путем изменения настройки языка пользовательского интерфейса по умолчанию можно повлиять на работоспособность мультикиоска только когда система в режиме аудита или при первой загрузке после запечатывания системы. А это значит, что придется запечатывать систему с файлом ответов, в котором будет выбран язык системы английский, а дальше изменять настройки системы чтобы интерфейс был русским. Не очень хорошее решение. Может проблему можно решить способом установки языкового пакета или установкой дополнительных языковых пакетов?
Эксперимент 8
Заливаем образ системы – англоязычный в режиме аудита.
Подключаемся к интернету, в параметрах системы заходим в раздел «Language» выбираем «Add language», выбираем язык «Русский», нажимаем «Next», параметры установки оставляем по умолчанию, нажимаем «Install», после установки языкового пакета перезагружаем систему, теперь на русифицирована. Отключаем систему от интернета, запускаем «Sysprep.bat», выбираем пункт 2.
После загрузки системы в оснастке «Управление компьютером» создаем пользователя «User», добавляем пакет подготовки, заходим в учетную запись «User», мультикиоск не работает.
Эксперимент 9
Попробуем русифицировать систему до установки, в оффлайн режиме. Заодно будет краткий ликбез по локализации дистрибутива.
Беру флэшку с чистым оригинальным дистрибутивом – X21-96381. Она будет диском «E». Для монтирования образов создаю папки: «c:MountInstall», «c:MountWinre», «c:MountBoot». Беру набор пакетов локализации – X21-87814. И в папку «c:Mount» копирую из него пакеты: «Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab», «lp.cab», «WinPE-Setup_ru-ru.cab». Запускаю консоль с правами администратора. Думаю, что дальнейшие команды будут понятны без комментариев.
Команды локализации
cd c:mount
dism /Mount-Wim /WimFile:e:sourcesinstall.wim /index:1 /MountDir:Installcode
dism /Image:Install /Add-Package /PackagePath:Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cabcode
dism /Image:Installcode /Set-AllIntl:ru-ru
dism /Image:Install /Set-TimeZone:"Russian Standard Time"code
dism /Mount-Wim /WimFile:InstallWindowsSystem32RecoveryWinre.wim /index:1 /MountDir:Winrecode
dism /Image:Winre /Add-Package /PackagePath:lp.cabcode
dism /Image:Winrecode /Set-AllIntl:ru-ru
dism /Image:Winre /Set-TimeZone:"Russian Standard Time"code
dism /Unmount-Image /MountDir:Winre /Commitcode
dism /Image:Install /Gen-LangINI /distribution:E: /Set-AllIntl:ru-RUcode
dism /image:Install /Set-SetupUILang:RU-ru /distribution:E:code
dism /Unmount-Image /MountDir:Install /Commitcode
dism /mount-wim /wimfile:e:sourcesboot.wim /index:1 /mountdir:Bootcode
dism /Image:Boot /Add-Package /PackagePath:lp.cabcode
dism /Image:Bootcode /Set-AllIntl:ru-ru
copy e:sourceslang.ini Bootsourceslang.inicode
dism /Unmount-Image /MountDir:Boot /Commitcode
dism /mount-wim /wimfile:e:sourcesboot.wim /index:2 /mountdir:Bootcode
dism /Image:Boot /Add-Package /PackagePath:lp.cabcode
dism /Image:Boot /Add-Package /PackagePath:WinPE-Setup_ru-ru.cabcode
dism /Image:Bootcode /Set-AllIntl:ru-ru
copy e:sourceslang.ini Bootsourceslang.ini /ycode
dism /Unmount-Image /MountDir:Boot /Commit
Загружаемся с флэшки, выбираем русский язык и ставим систему на чистый диск. Когда система просит выбрать регион нажимаем «Ctrl+Shift+F3». В оснастке «Управление компьютером» создаем пользователя «User», добавляем пакет подготовки, заходим в учетную запись «User», мультикиоск не работает.
Загружаемся с флэшки в WinPE. Выполняем команду «Dism /image:E: /Set-UILang:en-us».
Загружаемся в систему, пытаемся войти в учетную запись «User», мультикиоск работает.
Видимо дело не в методах добавления пакета, попробуем добавить дополнительные пакеты.
Эксперимент 10
Берем флэшку, которую мы подготовили на предыдущем шаге.
Берем пакет «Feat on Demand» – X21-87815. В папку «c:Mount» копирую из него пакеты: «Microsoft-Windows-LanguageFeatures-Basic-ru-ru-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-OCR-ru-ru-Package~31bf3856ad364e35~x86~~.cab», «Microsoft-Windows-LanguageFeatures-Handwriting-ru-ru-Package~31bf3856ad364e35~x86~ ~.cab», «Microsoft-Windows-LanguageFeatures-TextToSpeech-ru-ru-Package~31bf3856ad364e35~x86~~.cab».
Берем пакет «Feat on Demand RDX Updt» – X21-99781. В папку «c:Mount» копирую из него пакеты: «Microsoft-Windows-RetailDemo-OfflineContent-Content-Package~31bf3856ad364e35~x86~~.cab», « Microsoft-Windows-RetailDemo-OfflineContent-Content-ru-ru-Package~31bf3856ad364e35~x86~~.cab».
Запускаем консоль с правами администратора и выполняем команды:
Команды
cd c:mount
dism /Mount-Wim /WimFile:e:sourcesinstall.wim /index:1 /MountDir:Install
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-Basic-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-OCR-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-Handwriting-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-LanguageFeatures-TextToSpeech-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-RetailDemo-OfflineContent-Content-Package~31bf3856ad364e35~x86~~.cab
dism /Add-Package /Image:Install /PackagePath:Microsoft-Windows-RetailDemo-OfflineContent-Content-ru-ru-Package~31bf3856ad364e35~x86~~.cab
dism /Unmount-Image /MountDir:Install /Commit
Загружаемся с флэшки, выбираем русский язык и ставим систему на чистый диск. Когда система просит выбрать регион нажимаем «Ctrl+Shift+F3». В оснастке «Управление компьютером» создаем пользователя «User», добавляем пакет подготовки, заходим в учетную запись «User». Я получил черный экран, который долго висел, поэтому я выполнил горячую перезагрузку системы.
Удаляем пакет подготовки, заходим под пользователем «User», перезагружаем систему, добавиляем пакет подготовки, мультикиоск не работает.
Загружаемся с флэшки в WinPE. Выполняем команду «Dism /image:E: /Set-UILang:en-us».
Загружаемся в систему, пытаемся войти в учетную запись «User», мультикиоск работает.
Обход проблемы
Нормальные герои. Всегда идут в обход!
Различные способы установки пакетов локализации не решили проблему, значит придется при первой загрузке после запечатывания устанавливать язык «en-us», а после первой загрузки изменять языковые настройки.
Заливаем образ системы – русифицированный в режиме аудита.
В файле «Unattend.xml» в параметре вписываем «en-US», запускаем «Sysprep.bat», выбираем пункт 2 и смотрим, что у нас получилось. Экран приветствия на английском языке, мультикиоск – работает. Значит нужно добавить в «Unattend.xml» команду на изменение языка приветствия. А для этого необходимо выполнить команду «control intl.cpl,,/f:» с указанием конфигурационного файла, в котором будет прописано копирование текущих параметров в экран приветствия. Содержимое конфигурационного файла будет выглядеть вот так.
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<gs:UserList>
<gs:User UserID="Current" CopySettingsToSystemAcct="true"/>
</gs:UserList>
</gs:GlobalizationServices>
Т.к. будет копирование настроек текущего пользователя, то и выполнять команду нужно после входа пользователя в систему, а это значит, что нам понадобятся. Есть одно небольшое «но», выполнение будет после входа пользователя с правами администратора. И мне бы не хотелось создавать дополнительный файл, который будет необходим для успешного выполнения команды. Лучше все решение реализовать в едином файле — «Unattend.xml». Для этого просто нужно будет выполнить команду, которая создает конфигурационный файл. Думаю, что создам конфигурационный файл с помощью команды «echo» в среде «cmd», но в ней нужно экранировать угловые скобки циркумфлексом. Т.е. для создания конфигурационного файла получается вот такая команда.
echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"/^>^</gs:UserList^>^</gs:GlobalizationServices^>>Config.xml
Но нам эту команду нужно поместить в XML, у которого свои требования к использованию спецсимволов:
Спецсимвол
Замещающее значение
>
>
<
<
&
&
‘
'
“
"
В итоге для создания конфигурационного файла получилась вот такая команда для «FirstLogonCommands».
cmd.exe /c echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"/^>^</gs:UserList^>^</gs:GlobalizationServices^>>"%TMP%Config.xml"
Далее выполняем команду с использованием конфигурационного файла.
control intl.cpl,,/f:"%TMP%Config.xml"
Далее удаляем ранее созданный файл и перезагружаем систему т.к. изменения вступят в силу после перезагрузки.
cmd.exe /c del "%TMP%Config.xml" /q&shutdown /r /f /t 00
В итоге у меня получился вот такой файл ответов для sysprep’а.
Unattend.xml
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="specialize">
<component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v SetupDisplayedProductKey /t REG_DWORD /d 1 /f</Path>
<Order>1</Order>
<Description>Dont show key page</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>reg add HKLMSoftwareMicrosoftWindowsCurrentVersionSetupOOBE /v UnattendCreatedUser /t REG_DWORD /d 1 /f</Path>
<Order>2</Order>
<Description>Dont make account</Description>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>cmd.exe /c rd %systemdrive%Sysprep /s /q</Path>
<Order>3</Order>
<Description>Del Folder</Description>
</RunSynchronousCommand>
</RunSynchronous>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Enabled>true</Enabled>
<Username>Admin</Username>
</AutoLogon>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-US; ru-RU</InputLocale>
<SystemLocale>ru-RU</SystemLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback></UILanguageFallback>
<UserLocale>ru-RU</UserLocale>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c echo ^<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"^>^<gs:UserList^>^<gs:User UserID="Current" CopySettingsToSystemAcct="true"/^>^</gs:UserList^>^</gs:GlobalizationServices^>>"%TMP%Config.xml"</CommandLine>
<Description>CreateConfig</Description>
<Order>1</Order>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>control intl.cpl,,/f:"%TMP%Config.xml"</CommandLine>
<Description>UseConfig</Description>
<Order>2</Order>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c del "%TMP%Config.xml" /q&shutdown /r /f /t 00</CommandLine>
<Description>DelConfig</Description>
<Order>3</Order>
</SynchronousCommand>
</FirstLogonCommands>
</component>
</settings>
Проверяем…
Заливаем образ системы – русифицированный в режиме аудита.
Меняем файл Unattend.xml на новый, запускаем «Sysprep.bat», выбираем пункт 2 и смотрим, что у нас получилось. При первой загрузке экран приветствия на английском языке, система перезагружается. Экран приветствия на русском языке, мультикиоск работает.
Если у вас остались вопросы относительно настройки и лицензирования Windows 10 IoT Enterprise, обращайтесь по адресу mse@quarta.ru или на сайт quarta-embedded.ru.
Ответы на некоторые вопросы Вы можете найти в нашей вики или на нашем YouTube-канале
Автор статьи: Борисенков Владимир, технический эксперт компании Кварта Технологии.
Источник: habr.com
- Topics
- Windows, Windows 10, Windows 10 IoT Enterprise LTSC 2021, 21H2, English, x64, 64-bit, Microsoft, IoT, LTSC, 19044.1288, DVD, Operating System, DVD-ROMs, Operating System DVD-ROMs, 2021
- Language
- English
- Item Size
- 4.5G
Windows 10 IoT Enterprise LTSC 2021
Version 21H2 (OS Build 19044.1288)
Retail
Minimum system requirements:
Processor: 1 GHz or more
RAM: 2 Gb (64-bit)
Disk space: 20 Gb
Graphics: DirectX 9 support with WDDM 1.0 or higher drivers
Screen resolution: from 800×600
- Addeddate
- 2023-01-12 08:19:19
- Identifier
- en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202301
- Reviews allowed
- none
- Scanner
- Internet Archive HTML5 Uploader 1.7.0
comment
Reviews
Reviews have been disabled for this item.
95,976
Views
85
Favorites
DOWNLOAD OPTIONS
Uploaded by
Icexstorm
on
-
Home
-
News
- What Is Windows 10 IoT Enterprise? How to Free Download It?
By Daisy | Follow |
Last Updated
What is Windows 10 IoT Enterprise? How to free download and install it? This post from MiniTool will tell you how to get the Windows 10 IoT Enterprise ISO file and where to get the key to activate it.
What Is Windows 10 IoT Enterprise
Windows 10 IoT is a part of the Windows 10 family. It brings enterprise-class power, security, and manageability to the Internet of Things. It leverages Windows’ embedded experience, ecosystem, and cloud connectivity to enable organizations to create their own IoT with secure devices that can be provisioned quickly, managed easily, and seamlessly connected to an overall cloud strategy.
There are two editions of Windows 10 IoT – Windows 10 IoT Enterprise and Windows 10 IoT Core.
Windows 10 IoT Enterprise is a full version of Windows 10 with specialized features to create specialized devices locked to a specific set of applications and peripherals. Windows 10 IoT is the smallest member of the Windows 10 operating system family. While only running one app, it still has the manageability and security you’ve come to expect from Windows 10.
Download Windows 10 IoT Enterprise
Before downloading Windows 10 IoT Enterprise, you need to check if your PC meets the minimum system requirements.
Minimum system requirements:
- Processor: 1 GHz or more
- RAM: 2 Gb (64-bit)
- Disk space: 20 Gb
- Graphics: DirectX 9 support with WDDM 1.0 or higher drivers
- Screen resolution: from 800×600
How to download Windows 10 IoT Enterprise? Microsoft doesn’t give the link to download Windows 10 IoT Enterprise ISO direct. You can install Windows 10 Pro then you buy Windows 10 IoT Enterprise key. Your Windows 10 Pro will change to Windows 10 IoT Enterprise and it’s activated.
Besides, you can choose to download Windows 10 IoT Enterprise LTSC 2021 on the Internet. Go to the archive’s official website and search for Windows 10 IoT Enterprise LTSC 2021 and then click ISO IMAGE on the right side of the page. Then click the download button and the Windows 10 IoT Enterprise LTSC 2021 file will be downloaded.
You can also click the SHOW ALL option to download other editions of Windows 10 IoT Enterprise LTSC 2021. Then, you can choose one of them to download it.
Note:
Note: To install Windows 10 IoT Enterprise LTSC 2019, you can download Windows 10 Enterprise LTSC 2019 ISO file. After you install Windows 10 Enterprise LTSC 2019, you use Windows 10 IoT Enterprise LTSC 2019 product key, and your Windows 10 Enterprise LTSC 2019 will change to Windows 10 IoT Enterprise LTSC 2019.
Also see: Windows 11 IoT Enterprise: What Is It & How to Download It?
Install Windows 10 IoT Enterprise
After downloading Windows 10 IoT Enterprise, you can install it. Before installing it, you had better back up your important data or the whole system since the installation will remove everything on your previous system. To do this thing, you can try the PC backup program – MiniTool ShdowMaker, which supports backing up systems and files. Click the below button to download it.
MiniTool ShadowMaker TrialClick to Download100%Clean & Safe
Installing Windows 10 IoT Enterprise is similar to installing Windows 10. You should burn the ISO file to a USB drive using Rufus or other burning software. Then, boot your PC from the USB installation drive and follow the on-screen instructions to complete the installation. For more details, refer to this post – How to Clean Install Windows 10 22H2 (the 2022 Update) from USB.
Final Words
Here is all the information about Windows 10 IoT Enterprise. You can know how to download and install it. Just follow the above instructions for a try. If you have any other issues or ideas, let us know in the comment below.
About The Author
Position: Columnist
Having been an editor at MiniTool since graduating college as an English major, Daisy specializes in writing about data backups, disk cloning, and file syncing as well as general computer knowledge and issues. In her free time, Daisy enjoys running and going with friends to the amusement park.