Предоставленное приложение не устанавливается для новых пользователей

Предоставленное приложение не устанавливается для новых пользователей

Я пытаюсь добавить некоторые обновленные/дополнительные пакеты в образ установщика 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.

https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sideload-apps-with-dism-s14?view=windows-11

Обновлять

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

Однако ~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

Связанный контент