Я пытаюсь добавить некоторые обновленные/дополнительные пакеты в образ установщика 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.
# example
# the following files exist
# 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 (an empty folder)
$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
# the updated install.wim is then copied to the installation media
Обновлять
Читая часть документации, похоже, что это может быть невозможно. Я скачал их с GitHub, но это все еще, вероятно, считается приложением магазина, так как вы можете получить его оттуда.
Вы не можете загрузить стороннее приложение, загруженное из Microsoft Store. Чтобы установить приложения Windows, которые не являются частью вашей бизнес-линии, вы должны использовать Microsoft Store.
Обновлять
После дальнейших экспериментов приложения в конечном итоге устанавливаются без какого-либо взаимодействия с пользователем.
Однако ~15 минут, которые на это уйдут, — это далеко не идеальный вариант!
Если посмотреть на AppxLogs, то после запуска задачи «Edge» или «Search» (служба WSearch) до начала установки прошел период около 15 минут, но я не смог понять, что они делали или как их остановить.
Я не смог найти способ автоматически выполнить указанную выше ручную команду, так как для этого нужны права администратора, но после прочтения документации я понял, что единственное, Get-AppxProvisionedPackage
для чего это необходимо, Add-AppxPackage
будет работать нормально.
Ниже приведен пример того, как я добавил задачу RunOnce для ускорения установки.
# working example
# the following files exist
# 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 (an empty folder)
$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"
# create RunOnce if not exist
# close the handle to allow the hive to unload successfully
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
# sleep may not be required
[gq]::Collect()
Start-Sleep -Seconds 1
reg unload "HKU\DefaultUser"
Dismount-WindowsImage -Path $mount -Save
# the updated install.wim is then copied to the installation media