Вопрос или проблема
Я пытаюсь добавить некоторые обновленные/дополнительные пакеты в образ установщика Windows 10. (например, обновленный установщик настольных приложений и PowerShell)
Мне удается установить пакеты на смонтированный образ WIM без ошибок, и изображение можно использовать для успешной установки Windows.
Я был под впечатлением, что установленный пакет доступен для всех новых пользователей, но добавленные мною пакеты не такие.
Я могу установить их вручную (в оффлайне, ничего не загружая из интернета) с помощью PowerShell, используя следующее:
$package = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq "Microsoft.DesktopAppInstaller" }
Add-AppxPackage -RegisterByFamilyName -MainPackage $package.PackageName
Я пропускаю какой-то шаг при создании моего install.wim, из-за которого они не устанавливаются автоматически, или это ожидаемый результат?
Я могу добавить скрипт для запуска при первом входе в систему, чтобы автоматически их установить, как указано выше, но я предпочел бы этого не делать, если нет необходимости.
Обновление
Ниже приведен пример того, как я добавил DesktopAppInstaller.
# пример
# следующие файлы существуют
# C:\Deploy\install.wim
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
# C:\Deploy\Packages\Microsoft.UI.Xaml.2.7.appx
# C:\Deploy\Packages\Microsoft.VCLibs.x64.14.00.Desktop.appx
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
# C:\Deploy\mount (пустая папка)
$packages = "C:\Deploy\Packages"
$mount = "C:\Deploy\mount"
$image = "C:\Deploy\install.wim"
Mount-WindowsImage -Path $mount -ImagePath $image -Index 1
Add-AppxProvisionedPackage -Path $mount -PackagePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -DependencyPackagePath $packages\Microsoft.UI.Xaml.2.7.appx,$packages\Microsoft.VCLibs.x64.14.00.Desktop.appx -LicensePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
Dismount-WindowsImage -Path $mount -Save
# обновленный install.wim затем копируется на установочный носитель
Обновление
Изучив некоторую документацию, похоже, это может быть невозможно. Я скачал их с GitHub, но их все равно, вероятно, считают приложением из магазина, так как вы можете получить его оттуда.
Вы не можете устанавливать приложение, скачанное из Microsoft Store. Чтобы установить приложения Windows, которые не являются частью вашей бизнес-линии, вы должны использовать Microsoft Store.
Обновление
После дальнейших экспериментов приложения в конце концов устанавливаются без взаимодействия пользователя.
Однако ~15 минут, необходимых для этого, менее чем идеально!
Смотря на AppxLogs, был период примерно в 15 минут после того, как запустилась задача “Edge” или “Поиск” (служба WSearch), прежде чем начнется установка, но я не смог понять, что они делают или как их остановить.
Я не смог найти способ автоматически выполнить команду выше, так как для этого нужны права администратора, но после прочтения документации только Get-AppxProvisionedPackage
требует этого, Add-AppxPackage
сработает нормально.
Ниже приведен пример того, как я добавил задачу RunOnce для ускорения установки.
# рабочий пример
# следующие файлы существуют
# C:\Deploy\install.wim
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
# C:\Deploy\Packages\Microsoft.UI.Xaml.2.7.appx
# C:\Deploy\Packages\Microsoft.VCLibs.x64.14.00.Desktop.appx
# C:\Deploy\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
# C:\Deploy\mount (пустая папка)
$packages = "C:\Deploy\Packages"
$mount = "C:\Deploy\mount"
$image = "C:\Deploy\install.wim"
Mount-WindowsImage -Path $mount -ImagePath $image -Index 1
Add-AppxProvisionedPackage -Path $mount -PackagePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -DependencyPackagePath $packages\Microsoft.UI.Xaml.2.7.appx,$packages\Microsoft.VCLibs.x64.14.00.Desktop.appx -LicensePath $packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe_License1.xml
$packageName = Get-AppxProvisionedPackage -Path $mount | Where-Object { $_.DisplayName -eq "Microsoft.DesktopAppInstaller" } | Select-Object -ExpandProperty PackageName
reg load "HKU\DefaultUser" "$mount\Users\Default\NTUSER.DAT"
$key = "Registry::HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\RunOnce"
# создайте RunOnce, если он не существует
# закройте дескриптор, чтобы позволить хранилищу успешно выгрузиться
if ( -Not (Test-Path $key)) {
(New-Item -Path $key -Force).Handle.Close()
}
New-ItemProperty -Path $key -Name "DeployAppInstaller" -PropertyType ExpandString -Value ("""%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe"" -WindowStyle Hidden -ExecutionPolicy ByPass -Command ""Add-AppxPackage -RegisterByFamilyName -MainPackage '{0}'""" -f $packageName) -Force
# возможно, задержка не требуется
[gq]::Collect()
Start-Sleep -Seconds 1
reg unload "HKU\DefaultUser"
Dismount-WindowsImage -Path $mount -Save
# обновленный install.wim затем копируется на установочный носитель
Обновление
Вернувшись к этому, добавление -Regions All
к Add-AppxProvisionedPackage
позволяет пакету установиться без необходимости использовать runonce из приведенного выше кода. Похоже, вам нужно -Region
или (не пробовал) добавить приложение в ваш LayoutModification.xml, чтобы оно было установлено для новых пользователей.
Ответ или решение
Проблема с установкой Provisioned Appx для новых пользователей в Windows 10: Анализ и решение
Когда вы работаете с образами Windows и модулями Appx, установка необходимых пакетов с помощью команд PowerShell является критически важным аспектом для обеспечения правильной работы системы. Ваша ситуация, связанная с тем, что провизионные пакеты не устанавливаются для новых пользователей, требует детального рассмотрения. Давайте проанализируем шаги, которые вы предприняли, и попробуем идентифицировать причину проблемы.
1. Провизионные пакеты в Windows
При добавлении пакетов с помощью команды Add-AppxProvisionedPackage
вы действительно создаете список пакетов, которые должны быть установлены для всех новых пользователей. Однако отсутствие ожидаемой установки может быть связано с несколькими факторами:
-
Совместимость пакетов: Убедитесь, что используемые вами пакеты действительно могут быть провизионными. Например, некоторые приложения, загружаемые из Microsoft Store, могут не поддерживать провизию.
-
Неправильные атрибуты: Обратите внимание на параметры, используемые в команде. Вы упомянули добавление
-Regions All
, что действительно может упростить процесс установки, поскольку это заставляет Windows учитывать пакет для всех регионов.
2. Использование команд PowerShell
Вы правильно указали, что использование команды Add-AppxPackage
может быть выполнено для установки пакетов после их провизии. Однако стоит помнить, что это может потребовать прав администратора, если вы не используете контекст, позволяющий обойти это требование:
$packageName = Get-AppxProvisionedPackage -Path $mount | Where-Object { $_.DisplayName -eq "Microsoft.DesktopAppInstaller" } | Select-Object -ExpandProperty PackageName
Add-AppxPackage -RegisterByFamilyName -MainPackage $packageName
Таким образом, ваш замысел использовать задачу RunOnce
для автоматизации процесса является обоснованным решением в случае, если провизия не срабатывает.
3. Решение проблемы с задержкой
Если после установки образа пакеты установятся только через 15 минут, это может быть связано с фоновыми службами, такими как WSearch или Edge. Чтобы избежать таких задержек:
-
Оптимизация служб: Можно рассмотреть возможность отключения или временной приостановки некоторых служб на этапе начальной установки системы. Это может помочь улучшить скорость загрузки и установку приложений.
-
Регистровая запись и файловая система: Управление ключами реестра и оптимизация записей могут ускорить процессы. Использование
Registry::HKU\DefaultUser
для настройки задачRunOnce
позволяет выполнить важные операции сразу после первого входа пользователя.
Заключение
Ваша экспертиза и дополнительные обновления, такие как использование -Regions All
в команде Add-AppxProvisionedPackage
, являются шагом в правильном направлении. Если автоматическая установка происходит, но принимает слишком много времени, возможно, стоит исследовать дополнительные оптимизации через конфигурацию служб и реестра. Успех в установке пакетов может быть достижен с учетом всех этих деталей, что улучшит общий пользовательский опыт после установки Windows.