Windows Installer: switch to wix5

The chocolatey tool that was fetching us wix v3 can no longer be used to
fetch wix v4+ so we had to switch to dotnet to fetch the latest wix.

This commit builds the installer with wix v5.
wix v5 is installed via the `dotnet` tool in the windows image itself
at https://github.com/containers/automation_images/pull/354.

Going forward, the `dotnet` tool will also be used to build the installer.

In the process, the wix v3 files were converted to wix v4+ using `wix
convert` followed by manual modifications along with switch to wixproj
builds with dotnet.

The GitHub Action to upload windows installer now builds the installer
using winmake.ps1.

Contributions from Mario Loriedo:
- bundle setup update to wix5
- updates to build and release process scripts
Ref: https://github.com/lsm5/podman/pull/3

- small fixes to windows installer theme
Ref: https://github.com/lsm5/podman/pull/4

- Better win-installer sidebar logo
Ref: https://github.com/lsm5/podman/pull/5

Resolves: RUN-2055

Co-authored-by: Mario Loriedo <mario.loriedo@gmail.com>
Signed-off-by: Lokesh Mandvekar <lsm5@redhat.com>
This commit is contained in:
Lokesh Mandvekar
2024-07-05 15:28:19 -04:00
parent 74cfb3ce5f
commit e2ff5d4e5d
19 changed files with 505 additions and 510 deletions

View File

@ -33,7 +33,7 @@ env:
DEBIAN_NAME: "debian-13" DEBIAN_NAME: "debian-13"
# Image identifiers # Image identifiers
IMAGE_SUFFIX: "c20240701t155130z-f40f39d13" IMAGE_SUFFIX: "c20240702t180702z-f40f39d13"
# EC2 images # EC2 images
FEDORA_AMI: "fedora-aws-${IMAGE_SUFFIX}" FEDORA_AMI: "fedora-aws-${IMAGE_SUFFIX}"

View File

@ -78,17 +78,20 @@ jobs:
# The podman release process requires a cross-compile of the windows binaries be uploaded to # The podman release process requires a cross-compile of the windows binaries be uploaded to
# the release page as a hard-coded filename. If non-existent, this workflow will fail in # the release page as a hard-coded filename. If non-existent, this workflow will fail in
# non-obvious ways with a non-obvious error message. Address that here. # non-obvious ways with a non-obvious error message. Address that here.
- name: Confirm upload_asset_name is non-empty # TODO: Remove this in a future PR once verified to not cause artifact issues
if: ${{ steps.check.outputs.upload_asset_name == '' }} #- name: Confirm upload_asset_name is non-empty
run: | # if: steps.check.outputs.upload_asset_name == '' && github.event_name != 'pull_request'
Write-Output "::error::check.ps1 script failed to find manually uploaded podman-remote-release-windows_amd64.zip github release asset for version ${{steps.getversion.outputs.version}}." # run: |
Exit 1 # Write-Output "::error::check.ps1 script failed to find manually uploaded podman-remote-release-windows_amd64.zip github release asset for version ${{steps.getversion.outputs.version}}."
# Exit 1
- name: Set up Go - name: Set up Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
# N/B: already-exists may be an empty-string or "false", handle both cases. # N/B: already-exists may be an empty-string or "false", handle both cases.
if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true'
with: with:
go-version: stable go-version: stable
- name: Set up WiX
run: dotnet tool install --global wix
- name: Setup Signature Tooling - name: Setup Signature Tooling
if: steps.Check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' if: steps.Check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true'
run: | run: |
@ -98,20 +101,18 @@ jobs:
echo "APP_ID=${{secrets.AZ_APP_ID}}" | Out-File -FilePath $env:GITHUB_ENV -Append echo "APP_ID=${{secrets.AZ_APP_ID}}" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "TENANT_ID=${{secrets.AZ_TENANT_ID}}" | Out-File -FilePath $env:GITHUB_ENV -Append echo "TENANT_ID=${{secrets.AZ_TENANT_ID}}" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "CLIENT_SECRET=${{secrets.AZ_CLIENT_SECRET}}" | Out-File -FilePath $env:GITHUB_ENV -Append echo "CLIENT_SECRET=${{secrets.AZ_CLIENT_SECRET}}" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Pandoc Setup
uses: r-lib/actions/setup-pandoc@v2
with:
pandoc-version: '3.1.11'
- name: Build - name: Build
id: build id: build
if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true'
run: | run: |
Push-Location contrib\win-installer .\winmake.ps1 podman
.\build.ps1 ${{steps.getversion.outputs.version}} prod .\winmake.ps1 win-gvproxy
$code = $LASTEXITCODE .\winmake.ps1 docs
if ($code -eq 2) { .\winmake.ps1 installer
Write-Output "artifact-missing=true" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
Pop-Location
Exit 0
}
Pop-Location
Exit $code
- name: Artifact - name: Artifact
if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true'
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4

7
.gitignore vendored
View File

@ -35,6 +35,7 @@ release.txt
/test/copyimg/copyimg /test/copyimg/copyimg
/test/goecho/goecho /test/goecho/goecho
/test/version/version /test/version/version
/test/version/version.exe
/test/testvol/testvol /test/testvol/testvol
/test/tools/build /test/tools/build
/test/e2e/ginkgo-node-* /test/e2e/ginkgo-node-*
@ -45,12 +46,14 @@ result
/*runner_stats.log /*runner_stats.log
.generate-bindings .generate-bindings
contrib/win-installer/artifacts/ contrib/win-installer/artifacts/
contrib/win-installer/current/
contrib/win-installer/docs/ contrib/win-installer/docs/
contrib/win-installer/en-US/
contrib/win-installer/fetch/ contrib/win-installer/fetch/
contrib/win-installer/podman.msi
contrib/win-installer/podman-*setup.exe contrib/win-installer/podman-*setup.exe
contrib/win-installer/engine.exe contrib/win-installer/engine.exe
contrib/win-installer/obj/
contrib/win-installer/shasums contrib/win-installer/shasums
contrib/win-installer/pages.wxs
contrib/win-installer/*.wixobj contrib/win-installer/*.wixobj
contrib/win-installer/*.wixpdb contrib/win-installer/*.wixpdb
contrib/win-installer/*.log

View File

@ -10,7 +10,7 @@ Windows.
- [OS requirements](#os-requirements) - [OS requirements](#os-requirements)
- [Git and go](#git-and-go) - [Git and go](#git-and-go)
- [Pandoc](#pandoc) - [Pandoc](#pandoc)
- [WiX Toolset v3](#wix-toolset-v3) - [.NET SDK](#net-sdk)
- [Virtualization Provider](#virtualization-provider) - [Virtualization Provider](#virtualization-provider)
- [WSL](#wsl) - [WSL](#wsl)
- [Hyper-V](#hyper-v) - [Hyper-V](#hyper-v)
@ -70,14 +70,22 @@ Pandoc can be installed from https://pandoc.org/installing.html. When performing
the Pandoc installation one, has to choose the option "Install for all users" the Pandoc installation one, has to choose the option "Install for all users"
(to put the binaries into "Program Files" directory). (to put the binaries into "Program Files" directory).
### WiX Toolset v3 ### .NET SDK
[WiX Toolset](https://wixtoolset.org) **v3** is used to develop and build the [.NET SDK](https://learn.microsoft.com/en-us/dotnet/core/sdk), version 6 or
Podman Windows installer. It's not required for the Podman Windows client. later, is required to develop and build the Podman Windows installer. It's not
Version 3 of the WiX Toolset can be obtained from required for the Podman Windows client.
https://wixtoolset.org/docs/wix3/. Installing it into a clean VM might require
an additional installation of .NET Framework 3.5 in advance ```pwsh
([instructions for adding .NET Framework 3.5 via enabling the Windows feature](https://learn.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows#enable-the-net-framework-35-in-control-panel)) winget install -e Microsoft.DotNet.SDK.8
```
[WiX Toolset](https://wixtoolset.org) **v5**, distributed as a .NET SDK tool, is
used too and can be installed using `dotnet install`:
```pwsh
dotnet tool install --global wix
```
### Virtualization Provider ### Virtualization Provider
@ -304,9 +312,9 @@ The `installer` target of `winmake.ps1` runs the script
- `build-hooks.bat`: builds `podman-wslkerninst.exe` (WSL kernel installer) and - `build-hooks.bat`: builds `podman-wslkerninst.exe` (WSL kernel installer) and
`podman-msihooks.dll` (helper that checks if WSL and Hyper-V are installed). `podman-msihooks.dll` (helper that checks if WSL and Hyper-V are installed).
- `build-msi.bat`: builds `podman.msi` from the WiX source files `podman.wxs`, - `dotnet build podman.wixproj`: builds `podman.msi` from the WiX source files `podman.wxs`,
`pages.wxs`, `podman-ui.wxs` and `welcome-install-dlg.wxs`. `pages.wxs`, `podman-ui.wxs` and `welcome-install-dlg.wxs`.
- `build-burn.bat`: builds `podman-setup.exe` file from - `dotnet build podman-setup.wixproj`: builds `podman-setup.exe` file from
[WiX Burn bundle](https://wixtoolset.org/docs/tools/burn/) `burn.wxs`. [WiX Burn bundle](https://wixtoolset.org/docs/tools/burn/) `burn.wxs`.
### Test the Windows installer ### Test the Windows installer
@ -340,21 +348,20 @@ Podman is released (it's included in the `podman-setup.exe` bundle), it can be
faster to build and test that rather than the full bundle during the development faster to build and test that rather than the full bundle during the development
phase. phase.
Run the script `contrib\win-installer\build-msi.bat` to build the standalone Run the command `dotnet build` to build the standalone `podman.msi` file:
`podman.msi` file:
```pwsh ```pwsh
Push-Location .\contrib\win-installer\ Push-Location .\contrib\win-installer\
.\build-msi.bat 9.9.9 dotnet build podman.wixproj /property:DefineConstants="VERSION=9.9.9" -o .
Pop-Location Pop-Location
``` ```
It creates the file `.\contrib\win-installer\podman.msi`. Test it using the It creates the file `.\contrib\win-installer\en-US\podman.msi`. Test it using the
[Microsoft Standard Installer](https://learn.microsoft.com/en-us/windows/win32/msi/standard-installer-command-line-options) [Microsoft Standard Installer](https://learn.microsoft.com/en-us/windows/win32/msi/standard-installer-command-line-options)
command line tool: command line tool:
```pwsh ```pwsh
msiexec /package contrib\win-installer\podman.msi /l*v podman-msi.log msiexec /package contrib\win-installer\en-US\podman.msi /l*v podman-msi.log
``` ```
To run it in quiet, non-interactive mode, open the terminal **as an To run it in quiet, non-interactive mode, open the terminal **as an
@ -364,7 +371,7 @@ of the installation, `0` otherwise) and `WITH_HYPERV` (`1` to install Hyper-V as
part of the installation, `0` otherwise): part of the installation, `0` otherwise):
```pwsh ```pwsh
msiexec /package contrib\win-installer\podman.msi /l*v podman-msi.log /quiet MACHINE_PROVIDER=wsl WITH_WSL=0 WITH_HYPERV=0 msiexec /package contrib\win-installer\en-US\podman.msi /l*v podman-msi.log /quiet MACHINE_PROVIDER=wsl WITH_WSL=0 WITH_HYPERV=0
``` ```
:information_source: `podman.msi` GUI dialogs, defined in the file :information_source: `podman.msi` GUI dialogs, defined in the file
@ -390,12 +397,12 @@ Test-Path -Path "$ENV:PROGRAMFILES\RedHat\Podman\podman.exe"
# Check the generation of the podman configuration file # Check the generation of the podman configuration file
Test-Path -Path "$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf" Test-Path -Path "$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf"
# Check that the installer configured the right provider # Check that the installer configured the right provider
Get-Content '$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf' | Select -Skip 1 | ConvertFrom-StringData | % { $_.provider } Get-Content "$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf" | Select -Skip 1 | ConvertFrom-StringData | % { $_.provider }
# Check the creation of the registry key # Check the creation of the registry key
Test-Path -Path "HKLM:\SOFTWARE\Red Hat\Podman" Test-Path -Path "HKLM:\SOFTWARE\Red Hat\Podman"
Get-ItemProperty "HKLM:\SOFTWARE\Red Hat\Podman" InstallDir Get-ItemProperty "HKLM:\SOFTWARE\Red Hat\Podman" InstallDir
# Check the podman.exe is in the $PATH # Check the podman.exe is in the $PATH
$env:PATH | Select-String -Pattern "$ENV:PROGRAMFILES\RedHat\Podman" $env:PATH | Select-String -Pattern "Podman"
``` ```
:information_source: Podman CI uses script :information_source: Podman CI uses script

View File

@ -8,7 +8,7 @@ if ($Env:CI -eq "true") {
} else { } else {
$WIN_INST_FOLDER = "$PSScriptRoot\..\win-installer" $WIN_INST_FOLDER = "$PSScriptRoot\..\win-installer"
$ENV:WIN_INST_VER = "9.9.9" $ENV:WIN_INST_VER = "9.9.9"
$RELEASE_DIR = "$PSScriptRoot\..\.." $RELEASE_DIR = "$PSScriptRoot\..\..\contrib\win-installer\current"
$ENV:CONTAINERS_MACHINE_PROVIDER = "wsl" $ENV:CONTAINERS_MACHINE_PROVIDER = "wsl"
} }
@ -18,7 +18,7 @@ $WindowsPathsToTest = @("C:\Program Files\RedHat\Podman\podman.exe",
"$ConfFilePath", "$ConfFilePath",
"HKLM:\SOFTWARE\Red Hat\Podman") "HKLM:\SOFTWARE\Red Hat\Podman")
Set-Location $WIN_INST_FOLDER Push-Location $WIN_INST_FOLDER
# Build Installer # Build Installer
# Note: consumes podman-remote-release-windows_amd64.zip from repo.tbz2 # Note: consumes podman-remote-release-windows_amd64.zip from repo.tbz2
@ -30,15 +30,18 @@ $ret = Start-Process -Wait -PassThru ".\podman-${ENV:WIN_INST_VER}-dev-setup.exe
if ($ret.ExitCode -ne 0) { if ($ret.ExitCode -ne 0) {
Write-Host "Install failed, dumping log" Write-Host "Install failed, dumping log"
Get-Content inst.log Get-Content inst.log
Pop-Location
throw "Exit code is $($ret.ExitCode)" throw "Exit code is $($ret.ExitCode)"
} }
$WindowsPathsToTest | ForEach-Object { $WindowsPathsToTest | ForEach-Object {
if (! (Test-Path -Path $_) ) { if (! (Test-Path -Path $_) ) {
Pop-Location
throw "Expected $_ but it's not present after uninstall" throw "Expected $_ but it's not present after uninstall"
} }
} }
$machineProvider = Get-Content $ConfFilePath | Select-Object -Skip 1 | ConvertFrom-StringData | ForEach-Object { $_.provider } $machineProvider = Get-Content $ConfFilePath | Select-Object -Skip 1 | ConvertFrom-StringData | ForEach-Object { $_.provider }
if ( $machineProvider -ne "`"$ENV:CONTAINERS_MACHINE_PROVIDER`"" ) { if ( $machineProvider -ne "`"$ENV:CONTAINERS_MACHINE_PROVIDER`"" ) {
Pop-Location
throw "Expected `"$ENV:CONTAINERS_MACHINE_PROVIDER`" as default machine provider but got $machineProvider" throw "Expected `"$ENV:CONTAINERS_MACHINE_PROVIDER`" as default machine provider but got $machineProvider"
} }
@ -49,12 +52,15 @@ $ret = Start-Process -Wait -PassThru ".\podman-${ENV:WIN_INST_VER}-dev-setup.exe
if ($ret.ExitCode -ne 0) { if ($ret.ExitCode -ne 0) {
Write-Host "Uninstall failed, dumping log" Write-Host "Uninstall failed, dumping log"
Get-Content uninst.log Get-Content uninst.log
Pop-Location
throw "Exit code is $($ret.ExitCode)" throw "Exit code is $($ret.ExitCode)"
} }
$WindowsPathsToTest | ForEach-Object { $WindowsPathsToTest | ForEach-Object {
if ( Test-Path -Path $_ ) { if ( Test-Path -Path $_ ) {
Pop-Location
throw "Path $_ is still present after uninstall" throw "Path $_ is still present after uninstall"
} }
} }
Write-Host "Uninstaller verification successful!" Write-Host "Uninstaller verification successful!"
Pop-Location

View File

@ -1,7 +0,0 @@
@if "%1" == "" (
@echo "usage: build-burn.bat <version>"
@exit /b 1
)
candle -ext WixUIExtension -ext WixUtilExtension -ext WixBalExtension -arch x64 -dManSource="docs" -dVERSION="%1" burn.wxs || exit /b 1
light -ext WixUIExtension -ext WixUtilExtension -ext WixBalExtension .\burn.wixobj -out podman-setup.exe || exit /b 1

View File

@ -1,8 +0,0 @@
@if "%1" == "" (
@echo "usage: build-msi.bat <version>"
@exit /b 1
)
heat dir docs -var var.ManSource -cg ManFiles -dr INSTALLDIR -gg -g1 -srd -out pages.wxs || exit /b 1
candle -ext WixUIExtension -ext WixUtilExtension -ext .\artifacts\PanelSwWixExtension.dll -arch x64 -dManSource="docs" -dVERSION="%1" podman.wxs pages.wxs podman-ui.wxs welcome-install-dlg.wxs || exit /b 1
light -ext WixUIExtension -ext WixUtilExtension -ext .\artifacts\PanelSwWixExtension.dll .\podman.wixobj .\pages.wixobj .\podman-ui.wixobj .\welcome-install-dlg.wixobj -out podman.msi || exit /b 1

View File

@ -4,31 +4,6 @@ function ExitOnError() {
} }
} }
function FetchPanel() {
Remove-Item -Recurse -Force -Path fetch -ErrorAction SilentlyContinue | Out-Null
New-Item -Force -ItemType Directory fetch | Out-Null
Push-Location fetch
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -OutFile nuget.exe -ErrorAction Stop `
-Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
# 3.3.3.224 generates invalid schema with RemoveFeature defaults.
# Lock the version to 211 until this issue is fixed (7/18/2023)
.\nuget.exe install PanelSwWixExtension -Version 3.3.3.211
$code = $LASTEXITCODE
Pop-Location
if ($code -gt 0) {
Exit 1
}
$loc = Get-ChildItem -Recurse -Path fetch -Name PanelSwWixExtension.dll
if (!$loc) {
Write-Host "Could not locate PanelSwWixExtension.dll"
Exit 1
}
Copy-Item -Path fetch/$loc -Destination artifacts/PanelSwWixExtension.dll -ErrorAction Stop
}
function SignItem() { function SignItem() {
param( param(
[Parameter(Mandatory)] [Parameter(Mandatory)]
@ -71,7 +46,7 @@ function CheckCommand() {
function CheckRequirements() { function CheckRequirements() {
CheckCommand "gcc" "MingW CC" CheckCommand "gcc" "MingW CC"
CheckCommand "candle" "WiX Toolset" CheckCommand "wix" "WiX Toolset"
CheckCommand "go" "Golang" CheckCommand "go" "Golang"
} }
@ -99,7 +74,7 @@ if ($args.Count -lt 1 -or $args[0].Length -lt 1) {
} }
# Pre-set to standard locations in-case build env does not refresh paths # Pre-set to standard locations in-case build env does not refresh paths
$Env:Path="$Env:Path;C:\Program Files (x86)\WiX Toolset v3.14\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin;;C:\Program Files\Go\bin" $Env:Path="$Env:Path;C:\Users\micro\mingw64\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin;;C:\Program Files\Go\bin;C:\Program Files\dotnet"
CheckRequirements CheckRequirements
@ -129,8 +104,6 @@ if ($ENV:INSTVER -eq "") {
Exit 1 Exit 1
} }
FetchPanel
.\build-hooks.bat; ExitOnError .\build-hooks.bat; ExitOnError
SignItem @("artifacts/win-sshproxy.exe", SignItem @("artifacts/win-sshproxy.exe",
"artifacts/podman.exe", "artifacts/podman.exe",
@ -151,15 +124,18 @@ if ($gvExists) {
# } else { # } else {
# $env:IncludePolicyJSON = "Skip" # $env:IncludePolicyJSON = "Skip"
# } # }
.\build-msi.bat $ENV:INSTVER; ExitOnError if (Test-Path ./obj) {
SignItem @("podman.msi") Remove-Item ./obj -Recurse -Force -Confirm:$false
}
dotnet build podman.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError
SignItem @("en-US\podman.msi")
.\build-burn.bat $ENV:INSTVER; ExitOnError dotnet build podman-setup.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError
insignia -ib podman-setup.exe -o engine.exe; ExitOnError wix burn detach podman-setup.exe -engine engine.exe; ExitOnError
SignItem @("engine.exe") SignItem @("engine.exe")
$file = "podman-$version$suffix-setup.exe" $file = "podman-$version$suffix-setup.exe"
insignia -ab engine.exe podman-setup.exe -o $file; ExitOnError wix burn reattach -engine engine.exe podman-setup.exe -o $file; ExitOnError
SignItem @("$file") SignItem @("$file")
if (Test-Path -Path shasums) { if (Test-Path -Path shasums) {

View File

@ -1,50 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> <?ifndef var.VERSION?>
<?ifndef var.VERSION?> <?error VERSION must be defined via command line argument?>
<?error VERSION must be defined via command line argument?> <?endif?>
<?endif?> <Bundle Name="Podman" Version="$(var.VERSION)" Manufacturer="Red Hat" UpgradeCode="f3e1f40a-a791-49b7-9bc6-050975293353" IconSourceFile="resources\podman-logo.ico" Compressed="yes">
<Bundle Name="Podman" Version="$(var.VERSION)" Manufacturer="Red Hat" <BootstrapperApplication>
UpgradeCode="f3e1f40a-a791-49b7-9bc6-050975293353" IconSourceFile="resources\podman-logo.ico" <bal:WixStandardBootstrapperApplication LicenseUrl="" Theme="hyperlinkSidebarLicense" ThemeFile="podman-theme.xml" LocalizationFile="podman-theme.wxl" LogoFile="resources\podman-banner2.png" LogoSideFile="resources\podman-sidebar.png" SuppressOptionsUI="yes" ShowVersion="yes" />
Compressed="yes"> </BootstrapperApplication>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkSidebarLicense"> <Variable Name="InstallFolder" Type="formatted" Value="[ProgramFiles64Folder]RedHat\Podman" bal:Overridable="yes" />
<bal:WixStandardBootstrapperApplication LicenseUrl="" <Variable Name="VERSION" Value="$(var.VERSION)" />
ThemeFile="podman-theme.xml" <Variable Name="MachineProvider" Type="string" Value="wsl" bal:Overridable="yes" />
LocalizationFile="podman-theme.wxl" <Variable Name="WSLCheckbox" Type="numeric" Value="1" bal:Overridable="yes" />
LogoFile="resources\podman-banner2.png" <Variable Name="HyperVCheckbox" Type="numeric" Value="0" bal:Overridable="yes" />
LogoSideFile="resources\podman-sidebar.png" <Variable Name="AllowOldWin" Type="numeric" Value="0" bal:Overridable="yes" />
SuppressOptionsUI="yes" <Variable Name="LaunchTarget" Value="explorer.exe" />
ShowVersion="yes"/> <Variable Name="LaunchArguments" Value="&quot;[InstallFolder]\podman-for-windows.html&quot;" />
</BootstrapperApplicationRef> <Variable Name="SkipConfigFileCreation" Value="0" />
<Variable Name='InstallFolder' Type='string' Value='[ProgramFiles64Folder]RedHat\Podman' bal:Overridable="yes"/>
<Variable Name="VERSION" Value="$(var.VERSION)"/> <util:RegistrySearch Id="PreviousVersionSearch" Variable="PreviousVersion" Result="value" Root="HKLM" Key="SOFTWARE\[WixBundleManufacturer]\Updates\[WixBundleName]" Value="PackageVersion" />
<Variable Name="MachineProvider" Type="string" Value="wsl" bal:Overridable="yes"/> <util:RegistrySearch Id="PreviousInstallFolderSearch" Root="HKLM" Key="SOFTWARE\[WixBundleManufacturer]\[WixBundleName]" Value="InstallDir" Variable="PreviousInstallFolder" Bitness="always64" />
<Variable Name="WSLCheckbox" Type="numeric" Value="1" bal:Overridable="yes"/> <util:DirectorySearch Path="[PreviousInstallFolder]" Variable="InstallFolder" After="PreviousInstallFolderSearch" Condition="PreviousInstallFolder" />
<Variable Name="HyperVCheckbox" Type="numeric" Value="0" bal:Overridable="yes"/> <util:RegistrySearch Id="CurrentBuild" Variable="CBNumber" Result="value" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Value="CurrentBuildNumber" />
<Variable Name="AllowOldWin" Type="numeric" Value="0" bal:Overridable="yes"/> <bal:Condition Message="Windows 10 (19041) or later is required to run this application." Condition="VersionNT &gt;= v10.0 AND (CBNumber &gt;= 19041 OR AllowOldWin = 1)" />
<Variable Name="LaunchTarget" Value="explorer.exe"/> <bal:Condition Message="You have an installed development, pre-release version, or alternative build identifying as the same version of this installer. You must uninstall the existing version of Podman first, before proceeding." Condition="WixBundleInstalled OR WixBundleForcedRestartPackage OR PreviousVersion &lt;&gt; VERSION" />
<Variable Name="LaunchArguments" Value="&quot;[InstallFolder]\podman-for-windows.html&quot;"/> <Chain>
<Variable Name="SkipConfigFileCreation" Value="0"/> <MsiPackage Id="Setup" SourceFile="en-US\podman.msi" Vital="yes">
<MsiProperty Name="INSTALLDIR" Value="[InstallFolder]" />
<util:RegistrySearch Id="PreviousVersionSearch" Variable="PreviousVersion" Result="value" Root="HKLM" Key="SOFTWARE\[WixBundleManufacturer]\Updates\[WixBundleName]" Value="PackageVersion"/> <MsiProperty Name="MACHINE_PROVIDER" Value="[MachineProvider]" />
<util:RegistrySearch Id="PreviousInstallFolderSearch" Root="HKLM" Key="SOFTWARE\[WixBundleManufacturer]\[WixBundleName]" Value="InstallDir" Variable="PreviousInstallFolder" Win64="yes"/> <MsiProperty Name="WITH_WSL" Value="[WSLCheckbox]" />
<util:DirectorySearch Path="[PreviousInstallFolder]" Variable="InstallFolder" After="PreviousInstallFolderSearch" Condition="PreviousInstallFolder" /> <MsiProperty Name="WITH_HYPERV" Value="[HyperVCheckbox]" />
<util:RegistrySearch Id="CurrentBuild" Variable="CBNumber" Result="value" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Value="CurrentBuildNumber"/> <MsiProperty Name="SKIP_CONFIG_FILE_CREATION" Value="[SkipConfigFileCreation]" />
<bal:Condition Message="Windows 10 (19041) or later is required to run this application."> </MsiPackage>
<![CDATA[VersionNT >= v10.0 AND (CBNumber >= 19041 OR AllowOldWin = 1)]]> <ExePackage DisplayName="WSL Kernel Install" InstallCondition="(MachineProvider = &quot;wsl&quot;) AND (WSLCheckbox = 1)" SourceFile="artifacts\podman-wslkerninst.exe" DetectCondition="" Permanent="true" />
</bal:Condition> </Chain>
<bal:Condition Message="You have an installed development, pre-release version, or alternative build identifying as the same version of this installer. You must uninstall the existing version of Podman first, before proceeding."> <OptionalUpdateRegistration />
<![CDATA[WixBundleAction <> 5 OR WixBundleInstalled OR WixBundleForcedRestartPackage OR PreviousVersion <> VERSION]]> </Bundle>
</bal:Condition> </Wix>
<Chain>
<MsiPackage Id="Setup" SourceFile="podman.msi" Vital="yes">
<MsiProperty Name="INSTALLDIR" Value="[InstallFolder]" />
<MsiProperty Name="MACHINE_PROVIDER" Value="[MachineProvider]"/>
<MsiProperty Name="WITH_WSL" Value="[WSLCheckbox]"/>
<MsiProperty Name="WITH_HYPERV" Value="[HyperVCheckbox]"/>
<MsiProperty Name="SKIP_CONFIG_FILE_CREATION" Value="[SkipConfigFileCreation]"/>
</MsiPackage>
<ExePackage DisplayName="WSL Kernel Install" InstallCondition='(MachineProvider = "wsl") AND (WSLCheckbox = 1)' SourceFile="artifacts\podman-wslkerninst.exe"/>
</Chain>
<OptionalUpdateRegistration/>
</Bundle>
</Wix>

View File

@ -0,0 +1,12 @@
<Project Sdk="WixToolset.Sdk/5.0.0">
<PropertyGroup>
<InstallerPlatform>x64</InstallerPlatform>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<OutputType>Bundle</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="WixToolset.BootstrapperApplications.wixext" Version="5.0.0" />
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.0" />
<Compile Include="burn.wxs" />
</ItemGroup>
</Project>

View File

@ -2,67 +2,67 @@
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. --> <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. -->
<WixLocalization Culture="en-us" Language="1033" xmlns="http://schemas.microsoft.com/wix/2006/localization"> <WixLocalization Culture="en-us" Language="1033" xmlns="http://wixtoolset.org/schemas/v4/wxl">
<String Id="Caption">[WixBundleName] [VERSION] Setup</String> <String Id="Caption" Value="[WixBundleName] [VERSION] Setup" />
<String Id="Title">[WixBundleName] [VERSION]</String> <String Id="Title" Value="[WixBundleName] [VERSION]" />
<String Id="InstallHeader">Welcome to [WixBundleName] Setup</String> <String Id="InstallHeader" Value="Welcome to [WixBundleName] Setup" />
<String Id="InstallMessage">Welcome to the [WixBundleName] [VERSION] setup wizard. This will install [WixBundleName] on your computer. <String Id="InstallMessage" Value="Welcome to the [WixBundleName] [VERSION] setup wizard. This will install [WixBundleName] on your computer.
Additionally, you have the option to also install WSL (required by podman) if it is not already enabled. This operation requires a reboot during the installation process. Alternatively, you can deselect the WSL checkbox, and install WSL manually using the wsl --install command. Additionally, you have the option to also install WSL (required by podman) if it is not already enabled. This operation requires a reboot during the installation process. Alternatively, you can deselect the WSL checkbox, and install WSL manually using the wsl --install command.
Finally, click install to continue, or Close to abort the installation.</String> Finally, click install to continue, or Close to abort the installation." />
<String Id="InstallVersion">Version [WixBundleVersion]</String> <String Id="InstallVersion" Value="Version [WixBundleVersion]" />
<String Id="ConfirmCancelMessage">Are you sure you want to cancel?</String> <String Id="ConfirmCancelMessage" Value="Are you sure you want to cancel?" />
<String Id="ExecuteUpgradeRelatedBundleMessage">Previous version</String> <String Id="ExecuteUpgradeRelatedBundleMessage" Value="Previous version" />
<String Id="HelpHeader">Setup Help</String> <String Id="HelpHeader" Value="Setup Help" />
<String Id="HelpText">/install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or <String Id="HelpText" Value="/install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or
creates a complete local copy of the bundle in directory. Install is the default. creates a complete local copy of the bundle in directory. Install is the default.
/passive | /quiet - displays minimal UI with no prompts or displays no UI and /passive | /quiet - displays minimal UI with no prompts or displays no UI and
no prompts. By default UI and all prompts are displayed. no prompts. By default UI and all prompts are displayed.
/norestart - suppress any attempts to restart. By default UI will prompt before restart. /norestart - suppress any attempts to restart. By default UI will prompt before restart.
/log log.txt - logs to a specific file. By default a log file is created in %TEMP%.</String> /log log.txt - logs to a specific file. By default a log file is created in %TEMP%." />
<String Id="HelpCloseButton">&amp;Close</String> <String Id="HelpCloseButton" Value="&amp;Close" />
<String Id="InstallLicenseLinkText">[WixBundleName] &lt;a href="#"&gt;license terms&lt;/a&gt;.</String> <String Id="InstallLicenseLinkText" Value='[WixBundleName] &lt;a href="#"&gt;license terms&lt;/a&gt;.' />
<String Id="InstallAcceptCheckbox">I &amp;agree to the license terms and conditions</String> <String Id="InstallAcceptCheckbox" Value="I &amp;agree to the license terms and conditions" />
<String Id="InstallOptionsButton">&amp;Options</String> <String Id="InstallOptionsButton" Value="&amp;Options" />
<String Id="InstallInstallButton">&amp;Install</String> <String Id="InstallInstallButton" Value="&amp;Install" />
<String Id="InstallCloseButton">&amp;Close</String> <String Id="InstallCancelButton" Value="&amp;Close" />
<String Id="OptionsHeader">Setup Options</String> <String Id="OptionsHeader" Value="Setup Options" />
<String Id="OptionsLocationLabel">Install location:</String> <String Id="OptionsLocationLabel" Value="Install location:" />
<String Id="OptionsBrowseButton">&amp;Browse</String> <String Id="OptionsBrowseButton" Value="&amp;Browse" />
<String Id="OptionsOkButton">&amp;OK</String> <String Id="OptionsOkButton" Value="&amp;OK" />
<String Id="OptionsCancelButton">&amp;Cancel</String> <String Id="OptionsCancelButton" Value="&amp;Cancel" />
<String Id="ProgressHeader">Setup Progress</String> <String Id="ProgressHeader" Value="Setup Progress" />
<String Id="ProgressLabel">Processing:</String> <String Id="ProgressLabel" Value="Processing:" />
<String Id="OverallProgressPackageText">Initializing...</String> <String Id="OverallProgressPackageText" Value="Initializing..." />
<String Id="ProgressCancelButton">&amp;Cancel</String> <String Id="ProgressCancelButton" Value="&amp;Cancel" />
<String Id="ModifyHeader">Modify Setup</String> <String Id="ModifyHeader" Value="Modify Setup" />
<String Id="ModifyRepairButton">&amp;Repair</String> <String Id="ModifyRepairButton" Value="&amp;Repair" />
<String Id="ModifyUninstallButton">&amp;Uninstall</String> <String Id="ModifyUninstallButton" Value="&amp;Uninstall" />
<String Id="ModifyCloseButton">&amp;Close</String> <String Id="ModifyCancelButton" Value="&amp;Close" />
<String Id="SuccessRepairHeader">Repair Successfully Completed</String> <String Id="SuccessRepairHeader" Value="Repair Successfully Completed" />
<String Id="SuccessUninstallHeader">Uninstall Successfully Completed</String> <String Id="SuccessUninstallHeader" Value="Uninstall Successfully Completed" />
<String Id="SuccessInstallHeader">Installation Successfully Completed</String> <String Id="SuccessInstallHeader" Value="Installation Successfully Completed" />
<String Id="SuccessHeader">Setup Successful</String> <String Id="SuccessHeader" Value="Setup Successful" />
<String Id="SuccessLaunchButton">&amp;Open Guide &amp;&amp; Close</String> <String Id="SuccessLaunchButton" Value="&amp;Open Guide &amp;&amp; Close" />
<String Id="SuccessRestartText">You must restart your computer before you can use the software.</String> <String Id="SuccessRestartText" Value="You must restart your computer before you can use the software." />
<String Id="SuccessRestartButton">&amp;Restart</String> <String Id="SuccessRestartButton" Value="&amp;Restart" />
<String Id="SuccessCloseButton">&amp;Close</String> <String Id="SuccessCloseButton" Value="&amp;Close" />
<String Id="FailureHeader">Setup Failed</String> <String Id="FailureHeader" Value="Setup Failed" />
<String Id="FailureInstallHeader">Setup Failed</String> <String Id="FailureInstallHeader" Value="Setup Failed" />
<String Id="FailureUninstallHeader">Uninstall Failed</String> <String Id="FailureUninstallHeader" Value="Uninstall Failed" />
<String Id="FailureRepairHeader">Repair Failed</String> <String Id="FailureRepairHeader" Value="Repair Failed" />
<String Id="FailureHyperlinkLogText">One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the &lt;a href="#"&gt;log file&lt;/a&gt;.</String> <String Id="FailureHyperlinkLogText" Value='One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the &lt;a href="#"&gt;log file&lt;/a&gt;.' />
<String Id="FailureRestartText">You must restart your computer to complete the rollback of the software.</String> <String Id="FailureRestartText" Value="You must restart your computer to complete the rollback of the software." />
<String Id="FailureRestartButton">&amp;Restart</String> <String Id="FailureRestartButton" Value="&amp;Restart" />
<String Id="FailureCloseButton">&amp;Close</String> <String Id="FailureCloseButton" Value="&amp;Close" />
<String Id="FilesInUseHeader">Files In Use</String> <String Id="FilesInUseHeader" Value="Files In Use" />
<String Id="FilesInUseLabel">The following applications are using files that need to be updated:</String> <String Id="FilesInUseLabel" Value="The following applications are using files that need to be updated:" />
<String Id="FilesInUseCloseRadioButton">Close the &amp;applications and attempt to restart them.</String> <String Id="FilesInUseCloseRadioButton" Value="Close the &amp;applications and attempt to restart them." />
<String Id="FilesInUseDontCloseRadioButton">&amp;Do not close applications. A reboot will be required.</String> <String Id="FilesInUseDontCloseRadioButton" Value="&amp;Do not close applications. A reboot will be required." />
<String Id="FilesInUseOkButton">&amp;OK</String> <String Id="FilesInUseOkButton" Value="&amp;OK" />
<String Id="FilesInUseCancelButton">&amp;Cancel</String> <String Id="FilesInUseCancelButton" Value="&amp;Cancel" />
<String Id="ErrorFailNoActionReboot">No action was taken as a system reboot is required.</String> <String Id="ErrorFailNoActionReboot" Value="No action was taken as a system reboot is required." />
</WixLocalization> </WixLocalization>

View File

@ -1,97 +1,123 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. --> <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
<!--
This is a customization of WiX v5 `HyperlinkSidebarTheme.xml`:
https://github.com/wixtoolset/wix/blob/v5.0.0/src/ext/Bal/stdbas/Resources/HyperlinkSidebarTheme.xml
-->
<Theme xmlns="http://wixtoolset.org/schemas/thmutil/2010"> <Theme xmlns="http://wixtoolset.org/schemas/v4/thmutil">
<Window Width="600" Height="450" HexStyle="100a0000" FontId="0">#(loc.Title) Setup</Window> <Font Id="0" Height="-12" Weight="500" Foreground="windowtext" Background="window">Segoe UI</Font>
<Font Id="0" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font> <Font Id="1" Height="-24" Weight="500" Foreground="windowtext">Segoe UI</Font>
<Font Id="1" Height="-24" Weight="500" Foreground="000000">Segoe UI</Font> <Font Id="2" Height="-22" Weight="500" Foreground="graytext">Segoe UI</Font>
<Font Id="2" Height="-22" Weight="500" Foreground="666666">Segoe UI</Font> <Font Id="3" Height="-12" Weight="500" Foreground="windowtext" Background="window">Segoe UI</Font>
<Font Id="3" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font> <Font Id="4" Height="-12" Weight="500" Foreground="ff0000" Background="window" Underline="yes">Segoe UI</Font>
<Font Id="4" Height="-12" Weight="500" Foreground="ff0000" Background="FFFFFF" Underline="yes">Segoe UI</Font> <Font Id="5" Height="-28" Weight="500" Foreground="graytext">Segoe UI</Font>
<Font Id="5" Height="-28" Weight="500" Foreground="666666">Segoe UI</Font> <Font Id="6" Height="-12" Weight="600" Foreground="windowtext" Background="window">Segoe UI</Font>
<Font Id="6" Height="-12" Weight="600" Foreground="000000" Background="FFFFFF">Segoe UI</Font> <!-- Divider -->
<!-- Divider --> <Font Id="7" Height="-24" Weight="500" Foreground="windowtext" Background="E0E0E0">Segoe UI</Font>
<Font Id="7" Height="-24" Weight="500" Foreground="000000" Background="E0E0E0">Segoe UI</Font> <Window Width="600" Height="450" HexStyle="100a0000" FontId="0" Caption="#(loc.Caption)">
<Text X="11" Y="-45" Width="-11" Height="2" FontId="7" Visible="yes"></Text> <Label X="11" Y="-45" Width="-11" Height="2" FontId="7" Visible="yes"></Label>
<Page Name="Help"> <Page Name="Help">
<Image X="11" Y="11" Width="206" Height="64" ImageFile="logo.png"/> <Label X="80" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label>
<Text X="11" Y="80" Width="-11" Height="32" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Text> <ImageControl X="11" Y="11" Width="206" Height="64" ImageFile="logo.png" />
<Text X="11" Y="121" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Text> <Label X="11" Y="80" Width="-11" Height="32" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Label>
<Button Name="HelpCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.HelpCloseButton)</Button> <Label X="11" Y="121" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Label>
</Page> <Button Name="HelpCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Page Name="Install"> <Text>#(loc.HelpCloseButton)</Text>
<Image X="11" Y="11" Width="165" Height="364" ImageFile="logoside.png"/> <CloseWindowAction />
<Text X="185" Y="11" Width="-11" Height="40" FontId="5" DisablePrefix="yes">#(loc.InstallHeader)</Text> </Button>
<Text X="185" Y="82" Width="-11" Height="160" FontId="3" DisablePrefix="yes">#(loc.InstallMessage)</Text><!-- HexStyle="0x800000" --> </Page>
<Page Name="Install">
<Hypertext Name="EulaHyperlink" X="185" Y="-111" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext> <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/>
<Text Name="InstallVersion" X="185" Y="-61" Width="-11" Height="17" FontId="3" DisablePrefix="yes" HideWhenDisabled="yes">#(loc.InstallVersion)</Text> <Label X="185" Y="11" Width="-11" Height="40" FontId="5" DisablePrefix="yes">#(loc.InstallHeader)</Label>
<Checkbox Name="WSLCheckbox" X="185" Y="250" Width="-11" Height="17" TabStop="yes" FontId="6" HideWhenDisabled="yes">Install WSL if not present</Checkbox> <Label X="185" Y="82" Width="-11" Height="160" FontId="3" DisablePrefix="yes">#(loc.InstallMessage)</Label>
<Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.InstallOptionsButton)</Button> <Hypertext Name="EulaHyperlink" X="185" Y="-111" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext>
<Button Name="InstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button> <Label Name="InstallVersion" X="185" Y="-81" Width="-11" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label>
<Button Name="WelcomeCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallCloseButton)</Button> <Checkbox Name="WSLCheckbox" X="185" Y="250" Width="-11" Height="17" TabStop="yes" FontId="6" HideWhenDisabled="yes">Install WSL if not present</Checkbox>
</Page> <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
<Page Name="Options"> <Text>#(loc.InstallOptionsButton)</Text>
<Image X="11" Y="11" Width="206" Height="64" ImageFile="logo.png"/> <ChangePageAction Page="Options" />
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.OptionsHeader)</Text> </Button>
<Text X="11" Y="121" Width="-11" Height="17" FontId="3">#(loc.OptionsLocationLabel)</Text> <Button Name="InstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button>
<Editbox Name="FolderEditbox" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" /> <Button Name="InstallCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">#(loc.OptionsBrowseButton)</Button> <Text>#(loc.InstallCancelButton)</Text>
<CloseWindowAction />
<Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsOkButton)</Button> </Button>
<Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsCancelButton)</Button> </Page>
</Page> <Page Name="Options">
<Page Name="FilesInUse"> <ImageControl X="11" Y="11" Width="206" Height="64" ImageFile="logo.png"/>
<Image X="11" Y="11" Width="206" Height="64" ImageFile="logo.png"/> <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.OptionsHeader)</Label>
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.FilesInUseHeader)</Text> <Label X="11" Y="121" Width="-11" Height="17" FontId="3">#(loc.OptionsLocationLabel)</Label>
<Text X="11" Y="121" Width="-11" Height="34" FontId="3" DisablePrefix="yes">#(loc.FilesInUseLabel)</Text> <Editbox Name="InstallFolder" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" />
<Text Name="FilesInUseText" X="11" Y="150" Width="-11" Height="-86" FontId="3" DisablePrefix="yes" HexStyle="0x0000000C"></Text> <Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">
<Text>#(loc.OptionsBrowseButton)</Text>
<Button Name="FilesInUseCloseRadioButton" X="11" Y="-70" Width="-11" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes" HexStyle="0x000009">#(loc.FilesInUseCloseRadioButton)</Button> <BrowseDirectoryAction VariableName="InstallFolder" />
<Button Name="FilesInUseDontCloseRadioButton" X="11" Y="-50" Width="-11" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes" HexStyle="0x000009">#(loc.FilesInUseDontCloseRadioButton)</Button> </Button>
<Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Button Name="FilesInUseOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FilesInUseOkButton)</Button> <Text>#(loc.OptionsOkButton)</Text>
<Button Name="FilesInUseCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FilesInUseCancelButton)</Button> <ChangePageAction Page="Install" />
</Page> </Button>
<Page Name="Progress"> <Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Image X="11" Y="11" Width="206" Height="64" ImageFile="logo.png"/> <Text>#(loc.OptionsCancelButton)</Text>
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Text> <ChangePageAction Page="Install" Cancel="yes" />
<Text X="11" Y="141" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Text> </Button>
<Text Name="OverallProgressPackageText" X="85" Y="141" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OverallProgressPackageText)</Text> </Page>
<Progressbar Name="OverallCalculatedProgressbar" X="11" Y="163" Width="-11" Height="20" /> <Page Name="Progress">
<Button Name="ProgressCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ProgressCancelButton)</Button> <ImageControl X="11" Y="11" Width="206" Height="64" ImageFile="logo.png" />
</Page> <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Label>
<Page Name="Modify"> <Label X="11" Y="141" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Label>
<Text X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Text> <Label Name="OverallProgressPackageText" X="85" Y="141" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OverallProgressPackageText)</Label>
<Image X="11" Y="11" Width="165" Height="364" ImageFile="logoside.png"/> <Progressbar Name="OverallCalculatedProgressbar" X="11" Y="163" Width="-11" Height="20" />
<Text X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Text> <Button Name="ProgressCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ProgressCancelButton)</Button>
<Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> </Page>
<Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> <Page Name="Modify">
<Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyCloseButton)</Button> <Label X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label>
</Page> <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/>
<Page Name="Success"> <Label X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
<Text X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Text> <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
<Image X="11" Y="11" Width="165" Height="364" ImageFile="logoside.png"/> <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
<Text Name="SuccessHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessHeader)</Text> <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Text Name="SuccessInstallHeader" X="185" Y="50" Width="-11" Height="100" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessInstallHeader)</Text> <Text>#(loc.ModifyCancelButton)</Text>
<Text Name="SuccessRepairHeader" X="185" Y="50" Width="-11" Height="100" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessRepairHeader)</Text> <CloseWindowAction />
<Text Name="SuccessUninstallHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessUninstallHeader)</Text> </Button>
<Button Name="LaunchButton" X="-91" Y="-11" Width="125" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button> </Page>
<Text Name="SuccessRestartText" X="185" Y="-51" Width="400" Height="34" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessRestartText)</Text> <Page Name="Success">
<Button Name="SuccessRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button> <Label X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label>
<Button Name="SuccessCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.SuccessCloseButton)</Button> <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/>
</Page> <Label X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes">
<Page Name="Failure"> <Text>#(loc.SuccessHeader)</Text>
<Image X="11" Y="11" Width="165" Height="364" ImageFile="logoside.png"/> <Text Condition="WixBundleAction = 4">#(loc.SuccessUninstallHeader)</Text>
<Text Name="FailureHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureHeader)</Text> <Text Condition="WixBundleAction = 6">#(loc.SuccessInstallHeader)</Text>
<Text Name="FailureInstallHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureInstallHeader)</Text> <Text Condition="WixBundleAction = 8">#(loc.SuccessRepairHeader)</Text>
<Text Name="FailureUninstallHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureUninstallHeader)</Text> </Label>
<Text Name="FailureRepairHeader" X="185" Y="50" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRepairHeader)</Text> <Button Name="LaunchButton" X="-91" Y="-11" Width="125" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button>
<Hypertext Name="FailureLogFileLink" X="185" Y="121" Width="-11" Height="68" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext> <Label X="185" Y="-51" Width="400" Height="34" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBARestartRequired">
<Hypertext Name="FailureMessageText" X="185" Y="-115" Width="-11" Height="80" FontId="3" TabStop="yes" HideWhenDisabled="yes" /> <Text>#(loc.SuccessRestartText)</Text>
<Text Name="FailureRestartText" X="185" Y="-57" Width="-11" Height="80" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRestartText)</Text> <Text Condition="WixBundleAction = 3">#(loc.SuccessUninstallRestartText)</Text>
<Button Name="FailureRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FailureRestartButton)</Button> </Label>
<Button Name="FailureCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FailureCloseButton)</Button> <Button Name="SuccessRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button>
</Page> <Button Name="SuccessCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Text>#(loc.SuccessCloseButton)</Text>
<CloseWindowAction />
</Button>
</Page>
<Page Name="Failure">
<ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/>
<Label X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes">
<Text>#(loc.FailureHeader)</Text>
<Text Condition="WixBundleAction = 4">#(loc.FailureUninstallHeader)</Text>
<Text Condition="WixBundleAction = 6">#(loc.FailureInstallHeader)</Text>
<Text Condition="WixBundleAction = 8">#(loc.FailureRepairHeader)</Text>
</Label>
<Hypertext Name="FailureLogFileLink" X="185" Y="121" Width="-11" Height="68" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext>
<Hypertext Name="FailureMessageText" X="185" Y="-115" Width="-11" Height="80" FontId="3" TabStop="yes" HideWhenDisabled="yes" />
<Label X="185" Y="-57" Width="-11" Height="80" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBARestartRequired">#(loc.FailureRestartText)</Label>
<Button Name="FailureRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FailureRestartButton)</Button>
<Button Name="FailureCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Text>#(loc.FailureCloseButton)</Text>
<CloseWindowAction />
</Button>
</Page>
</Window>
</Theme> </Theme>

View File

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. --> <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. -->
<!-- <!--
@ -15,16 +14,14 @@ Patch dialog sequence:
- WixUI_VerifyReadyDlg - WixUI_VerifyReadyDlg
--> -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Fragment> <Fragment>
<UI Id="PodmanUI"> <UI Id="PodmanUI">
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
<Property Id="WixUI_Mode" Value="Minimal" /> <Property Id="WixUI_Mode" Value="Minimal" />
<DialogRef Id="ErrorDlg" /> <DialogRef Id="ErrorDlg" />
<DialogRef Id="FatalError" /> <DialogRef Id="FatalError" />
<DialogRef Id="FilesInUse" /> <DialogRef Id="FilesInUse" />
@ -33,30 +30,19 @@ Patch dialog sequence:
<DialogRef Id="ProgressDlg" /> <DialogRef Id="ProgressDlg" />
<DialogRef Id="ResumeDlg" /> <DialogRef Id="ResumeDlg" />
<DialogRef Id="UserExit" /> <DialogRef Id="UserExit" />
<DialogRef Id="WelcomeDlg" />
<DialogRef Id="WelcomeInstallDlg" /> <DialogRef Id="WelcomeInstallDlg" />
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999" />
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" />
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg" />
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg" />
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg" />
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg" />
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeInstallDlg" Order="2" Condition="Installed AND PATCH" />
<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
<InstallUISequence> <InstallUISequence>
<Show Dialog="WelcomeDlg" Before="WelcomeInstallDlg">Installed AND PATCH</Show> <Show Dialog="WelcomeInstallDlg" Before="ProgressDlg" Condition="(NOT Installed) AND NOT AFTERREBOOT" />
<Show Dialog="WelcomeInstallDlg" Before="ProgressDlg">(NOT Installed) AND NOT AFTERREBOOT</Show>
</InstallUISequence> </InstallUISequence>
<Property Id="ARPNOMODIFY" Value="1" /> <Property Id="ARPNOMODIFY" Value="1" />
</UI> </UI>
<UIRef Id="WixUI_Common" /> <UIRef Id="WixUI_Common" />
</Fragment> </Fragment>
</Wix> </Wix>

View File

@ -0,0 +1,37 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.10.35004.147
MinimumVisualStudioVersion = 10.0.40219.1
Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "podman", "podman.wixproj", "{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|ARM64.ActiveCfg = Debug|ARM64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|ARM64.Build.0 = Debug|ARM64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x64.ActiveCfg = Debug|x64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x64.Build.0 = Debug|x64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x86.ActiveCfg = Debug|x86
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x86.Build.0 = Debug|x86
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|ARM64.ActiveCfg = Release|ARM64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|ARM64.Build.0 = Release|ARM64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x64.ActiveCfg = Release|x64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x64.Build.0 = Release|x64
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x86.ActiveCfg = Release|x86
{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0F83E058-C6D8-49C2-95BD-645730145A9D}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,21 @@
<Project Sdk="WixToolset.Sdk/5.0.0">
<PropertyGroup>
<InstallerPlatform>x64</InstallerPlatform>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
<ItemGroup>
<HarvestDirectory Include="docs">
<ComponentGroupName>ManFiles</ComponentGroupName>
<DirectoryRefId>INSTALLDIR</DirectoryRefId>
<SuppressRootDirectory>true</SuppressRootDirectory>
</HarvestDirectory>
<BindPath Include="docs" />
<Compile Include="podman.wxs;podman-ui.wxs;welcome-install-dlg.wxs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="PanelSwWixExtension4" Version="5.1.1.375" />
<PackageReference Include="WixToolset.Heat" Version="5.0.0" />
<PackageReference Include="WixToolset.UI.wixext" Version="5.0.0" />
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.0" />
</ItemGroup>
</Project>

View File

@ -1,87 +1,64 @@
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:PanelSW="http://schemas.panel-sw.co.il/wix/WixExtension" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:PanelSW="http://schemas.panel-sw.co.il/wix/WixExtension">
<?ifndef var.VERSION?> <?ifndef VERSION?>
<?error VERSION must be defined via command line argument?> <?error VERSION must be defined via command line argument?>
<?endif?> <?endif?>
<?ifdef env.UseGVProxy?> <?ifdef env.UseGVProxy?>
<?define UseGVProxy = "$(env.UseGVProxy)"?> <?define UseGVProxy = "$(env.UseGVProxy)"?>
<?else?> <?else?>
<?define UseGVProxy = ""?> <?define UseGVProxy = ""?>
<?endif?> <?endif?>
<Package Name="podman" Manufacturer="Red Hat Inc." Version="$(VERSION)" UpgradeCode="a6a9dd9c-0732-44ba-9279-ffe22ea50671">
<Media Id="1" Cabinet="Podman.cab" EmbedCab="yes" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Property Id="DiskPrompt" Value="Red Hat's Podman $(VERSION) Installation" />
<Property Id="MACHINE_PROVIDER" Value="wsl" />
<Property Id="MACHINE_PROVIDER_CONFIG_FILE_PATH">
<DirectorySearch Id="CommonAppDataFolderSearch" Path="[CommonAppDataFolder]">
<DirectorySearch Id="ContainersFolderSearch" Path="containers">
<DirectorySearch Id="ContainersConfDFolderSearch" Path="containers.conf.d">
<FileSearch Name="99-podman-machine-provider.conf" />
</DirectorySearch>
</DirectorySearch>
</DirectorySearch>
</Property>
<Property Id="MAIN_EXECUTABLE_FILE_PATH">
<DirectorySearch Id="ProgramFiles6432FolderSearch" Path="[ProgramFiles6432Folder]">
<DirectorySearch Id="RedHatFolderSearch" Path="RedHat">
<DirectorySearch Id="PodmanFolderSearch" Path="Podman">
<FileSearch Name="podman.exe" />
</DirectorySearch>
</DirectorySearch>
</DirectorySearch>
</Property>
<Product Name="Podman $(var.VERSION)" Id="*" UpgradeCode="696BAB5D-CA1F-4B05-B123-320F245B8D6D" Version="$(var.VERSION)" Language="1033" Manufacturer="Red Hat Inc."> <!--
<Package Id="*" Platform="x64" Keywords="Installer" Description="Red Hat's Podman $(var.VERSION) Installer" Comments="Apache 2.0 License" Manufacturer="Red Hat Inc." InstallScope="perMachine" InstallerVersion="200" Compressed="yes"/>
<Media Id="1" Cabinet="Podman.cab" EmbedCab="yes"/>
<MajorUpgrade AllowDowngrades="yes"/>
<Property Id="DiskPrompt" Value="Red Hat's Podman $(var.VERSION) Installation"/>
<Property Id="MACHINE_PROVIDER" Value="wsl"/>
<Property Id="MACHINE_PROVIDER_CONFIG_FILE_PATH">
<DirectorySearch Id="CommonAppDataFolderSearch" Path="[CommonAppDataFolder]">
<DirectorySearch Id="ContainersFolderSearch" Path="containers">
<DirectorySearch Id="ContainersConfDFolderSearch" Path="containers.conf.d">
<FileSearch Name="99-podman-machine-provider.conf"/>
</DirectorySearch>
</DirectorySearch>
</DirectorySearch>
</Property>
<Property Id="MAIN_EXECUTABLE_FILE_PATH">
<DirectorySearch Id="ProgramFiles64FolderSearch" Path="[ProgramFiles64Folder]">
<DirectorySearch Id="RedHatFolderSearch" Path="RedHat">
<DirectorySearch Id="PodmanFolderSearch" Path="Podman">
<FileSearch Name="podman.exe"/>
</DirectorySearch>
</DirectorySearch>
</DirectorySearch>
</Property>
<!--
Property WSL_INSTALL is set at runtime and used as the condition to run the `WSLFeatureComponent` Component: Property WSL_INSTALL is set at runtime and used as the condition to run the `WSLFeatureComponent` Component:
WSL is installed only if all these conditions are met: WSL is installed only if all these conditions are met:
- WSL isn't already installed - WSL isn't already installed
- The user has set property `MACHINE_PROVIDER` to "wsl" - The user has set property `MACHINE_PROVIDER` to "wsl"
- The user hasn't set property `WITH_WSL` to 0 - The user hasn't set property `WITH_WSL` to 0
--> -->
<SetProperty Id="WSL_INSTALL" Before="AppSearch" Value="1" Sequence="first"> <SetProperty Id="WSL_INSTALL" Before="AppSearch" Value="1" Sequence="first" Condition="(HAS_WSLFEATURE = 0) AND (MACHINE_PROVIDER = &quot;wsl&quot;) AND (NOT (WITH_WSL = 0))" />
<![CDATA[ <!--
(HAS_WSLFEATURE = 0)
AND (MACHINE_PROVIDER = "wsl")
AND (NOT (WITH_WSL = 0))
]]>
</SetProperty>
<!--
Property HYPERV_INSTALL is set at runtime and used as the condition to run the `HyperVFeatureComponent` Component: Property HYPERV_INSTALL is set at runtime and used as the condition to run the `HyperVFeatureComponent` Component:
HyperV is installed only if all these conditions are met: HyperV is installed only if all these conditions are met:
- HyperV isn't already installed - HyperV isn't already installed
- The user has set property `MACHINE_PROVIDER` to "hyperv" - The user has set property `MACHINE_PROVIDER` to "hyperv"
- The user hasn't set property `WITH_HYPERV` to 0 - The user hasn't set property `WITH_HYPERV` to 0
--> -->
<SetProperty Id="HYPERV_INSTALL" Before="AppSearch" Value="1" Sequence="first"> <SetProperty Id="HYPERV_INSTALL" Before="AppSearch" Value="1" Sequence="first" Condition="(HAS_HYPERVFEATURE = 0) AND (MACHINE_PROVIDER = &quot;hyperv&quot;) AND (NOT (WITH_HYPERV = 0))" />
<![CDATA[ <!--
(HAS_HYPERVFEATURE = 0)
AND (MACHINE_PROVIDER = "hyperv")
AND (NOT (WITH_HYPERV = 0))
]]>
</SetProperty>
<!--
Property CREATE_MACHINE_PROVIDER_CONFIG_FILE is set at runtime and used as the condition to run the `MachineProviderConfigFile` Component: Property CREATE_MACHINE_PROVIDER_CONFIG_FILE is set at runtime and used as the condition to run the `MachineProviderConfigFile` Component:
The machine provider config file is created only if all these conditions are met: The machine provider config file is created only if all these conditions are met:
- The user hasn't set property `SKIP_CONFIG_FILE_CREATION` to 1 - The user hasn't set property `SKIP_CONFIG_FILE_CREATION` to 1
- The machine provider config file ($PROGRAMDATA/containers/containers.conf.d/99-podman-machine-provider.conf) doesn't exist - The machine provider config file ($PROGRAMDATA/containers/containers.conf.d/99-podman-machine-provider.conf) doesn't exist
- The main executable file ($PROGRAMDATA/RedHat/Podman/podman.exe) doesn't exist - The main executable file ($PROGRAMDATA/RedHat/Podman/podman.exe) doesn't exist
--> -->
<SetProperty Id="CREATE_MACHINE_PROVIDER_CONFIG_FILE" After="AppSearch" Value="1" Sequence="first"> <SetProperty Id="CREATE_MACHINE_PROVIDER_CONFIG_FILE" After="AppSearch" Value="1" Sequence="first" Condition="(NOT (SKIP_CONFIG_FILE_CREATION = 1)) AND (NOT MACHINE_PROVIDER_CONFIG_FILE_PATH) AND (NOT MAIN_EXECUTABLE_FILE_PATH)" />
<![CDATA[ <!--
(NOT (SKIP_CONFIG_FILE_CREATION = 1))
AND (NOT MACHINE_PROVIDER_CONFIG_FILE_PATH)
AND (NOT MAIN_EXECUTABLE_FILE_PATH)
]]>
</SetProperty>
<!--
Property HIDE_PROVIDER_CHOICE is set at runtime and used as the condition to hide the Machine Provider Property HIDE_PROVIDER_CHOICE is set at runtime and used as the condition to hide the Machine Provider
choice from the MSI GUI (the Radio Button Group and other related controls): choice from the MSI GUI (the Radio Button Group and other related controls):
The machine provider choice isn't shown to the user if one of these conditions are met: The machine provider choice isn't shown to the user if one of these conditions are met:
@ -89,121 +66,106 @@
- The machine provider config file ($PROGRAMDATA/containers/containers.conf.d/99-podman-machine-provider.conf) exists - The machine provider config file ($PROGRAMDATA/containers/containers.conf.d/99-podman-machine-provider.conf) exists
- The main executable file ($PROGRAMDATA/RedHat/Podman/podman.exe) exists - The main executable file ($PROGRAMDATA/RedHat/Podman/podman.exe) exists
--> -->
<SetProperty Id="HIDE_PROVIDER_CHOICE" After="AppSearch" Value="1" Sequence="first"> <SetProperty Id="HIDE_PROVIDER_CHOICE" After="AppSearch" Value="1" Sequence="first" Condition="(SKIP_CONFIG_FILE_CREATION = 1) OR (MACHINE_PROVIDER_CONFIG_FILE_PATH) OR (MAIN_EXECUTABLE_FILE_PATH)" />
<![CDATA[
(SKIP_CONFIG_FILE_CREATION = 1)
OR (MACHINE_PROVIDER_CONFIG_FILE_PATH)
OR (MAIN_EXECUTABLE_FILE_PATH)
]]>
</SetProperty>
<Directory Id="TARGETDIR" Name="SourceDir"> <CustomAction Id="OpenGuide" DllEntry="WixShellExec" Impersonate="yes" BinaryRef="Wix4UtilCA_X86" />
<Directory Id="ProgramFiles64Folder" Name="PFiles"> <CustomAction Id="CheckWSL" Execute="firstSequence" DllEntry="CheckWSL" BinaryRef="PodmanHooks" />
<Directory Id="RedHatPFiles" Name="RedHat"> <CustomAction Id="CheckHyperV" Execute="firstSequence" DllEntry="CheckHyperV" BinaryRef="PodmanHooks" />
<Directory Id="INSTALLDIR" Name="Podman"> <util:BroadcastEnvironmentChange />
<Component Id="INSTALLDIR_Component" Guid="14B310C4-9B5D-4DA5-ADF9-B9D008E4CD82" Win64="yes"> <ComponentGroup Id="WSLFeature" Directory="INSTALLDIR">
<CreateFolder/> <Component Id="WSLFeatureComponent" Guid="F6A693BC-186C-4E64-8015-C3073013B3A8" Condition="(NOT Installed) AND WSL_INSTALL = 1">
<RegistryKey Root="HKLM" Key="SOFTWARE\Red Hat\Podman"> <CreateFolder />
<RegistryValue Name="InstallDir" Value="[INSTALLDIR]" Type="string" /> <PanelSW:Dism EnableFeature="VirtualMachinePlatform" ErrorHandling="prompt" />
</RegistryKey> <PanelSW:Dism EnableFeature="Microsoft-Windows-Subsystem-Linux" ErrorHandling="prompt" />
</Component> </Component>
<Component Id="MainExecutable" Guid="73752F94-6589-4C7B-ABED-39D655A19714" Win64="yes"> </ComponentGroup>
<File Id="MainExecutableFile" Name="podman.exe" Source="artifacts/podman.exe" KeyPath="yes"/> <ComponentGroup Id="HyperVFeature" Directory="INSTALLDIR">
</Component> <Component Id="HyperVFeatureComponent" Guid="F7B2D4C9-6C89-46BB-B4EA-FF39424972F3" Condition="(NOT Installed) AND HYPERV_INSTALL = 1">
<Component Id="WinSshProxyExecutable" Guid="0DA730AB-2F97-40E8-A8FC-356E88EAA4D2" Win64="yes"> <CreateFolder />
<File Id="WinSshProxyExecutableFile" Name="win-sshproxy.exe" Source="artifacts/win-sshproxy.exe" KeyPath="yes"/> <PanelSW:Dism EnableFeature="Microsoft-Hyper-V" ErrorHandling="prompt" />
</Component> </Component>
<?if $(var.UseGVProxy) != Skip?> </ComponentGroup>
<Component Id="GvProxyExecutable" Guid="1A4A2975-AD2D-44AA-974B-9B343C098333" Win64="yes"> <Feature Id="Complete" Level="1">
<File Id="GvProxyExecutableFile" Name="gvproxy.exe" Source="artifacts/gvproxy.exe" KeyPath="yes"/> <ComponentRef Id="INSTALLDIR_Component" />
</Component> <ComponentRef Id="EnvEntriesComponent" />
<?endif?> <ComponentRef Id="MainExecutable" />
<Component Id="GuideHTMLComponent" Guid="8B23C76B-F7D4-4030-8C46-1B5729E616B5" Win64="yes"> <ComponentRef Id="WinSshProxyExecutable" />
<File Id="GuideHTMLFile" Name="welcome-podman.html" Source="docs/podman-for-windows.html" KeyPath="yes"/> <?if $(var.UseGVProxy) != Skip?>
</Component> <ComponentRef Id="GvProxyExecutable" />
</Directory> <?endif?>
</Directory> <ComponentRef Id="GuideHTMLComponent" />
</Directory> <ComponentRef Id="MachineProviderConfigFile" />
<!-- <ComponentGroupRef Id="ManFiles" />
<ComponentGroupRef Id="WSLFeature" />
<ComponentGroupRef Id="HyperVFeature" />
</Feature>
<Icon Id="podman.ico" SourceFile="resources/podman-logo.ico" />
<Property Id="ARPPRODUCTICON" Value="podman.ico" />
<Property Id="WixShellExecTarget" Value="[#GuideHTMLFile]" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Show Getting Started Guide" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<WixVariable Id="WixUIBannerBmp" Value="resources\podman-banner.png" />
<WixVariable Id="WixUIDialogBmp" Value="resources\podman-dialog.png" />
<UIRef Id="PodmanUI" />
<UI>
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="OpenGuide" Condition="WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed" />
</UI>
<InstallExecuteSequence>
<Custom Action="CheckWSL" Before="SetWSL_INSTALL" />
<Custom Action="CheckHyperV" Before="SetHYPERV_INSTALL" />
<ForceReboot Before="StopServices" Condition="(NOT Installed) AND ((WSL_INSTALL = 1) OR (HYPERV_INSTALL = 1)) AND (NOT AFTERREBOOT)" />
</InstallExecuteSequence>
<Binary Id="PodmanHooks" SourceFile="artifacts/podman-msihooks.dll" />
<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="RedHatPFiles" Name="RedHat">
<Directory Id="INSTALLDIR" Name="Podman">
<Component Id="INSTALLDIR_Component" Guid="14B310C4-9B5D-4DA5-ADF9-B9D008E4CD82" Bitness="always64">
<CreateFolder />
<RegistryKey Root="HKLM" Key="SOFTWARE\Red Hat\Podman">
<RegistryValue Name="InstallDir" Value="[INSTALLDIR]" Type="string" />
</RegistryKey>
</Component>
<Component Id="MainExecutable" Guid="73752F94-6589-4C7B-ABED-39D655A19714" Bitness="always64">
<File Id="MainExecutableFile" Name="podman.exe" Source="artifacts/podman.exe" KeyPath="yes" />
</Component>
<Component Id="WinSshProxyExecutable" Guid="0DA730AB-2F97-40E8-A8FC-356E88EAA4D2" Bitness="always64">
<File Id="WinSshProxyExecutableFile" Name="win-sshproxy.exe" Source="artifacts/win-sshproxy.exe" KeyPath="yes" />
</Component>
<?if $(var.UseGVProxy) != Skip?>
<Component Id="GvProxyExecutable" Guid="1A4A2975-AD2D-44AA-974B-9B343C098333" Bitness="always64">
<File Id="GvProxyExecutableFile" Name="gvproxy.exe" Source="artifacts/gvproxy.exe" KeyPath="yes" />
</Component>
<?endif?>
<Component Id="GuideHTMLComponent" Guid="8B23C76B-F7D4-4030-8C46-1B5729E616B5" Bitness="always64">
<File Id="GuideHTMLFile" Name="welcome-podman.html" Source="docs/podman-for-windows.html" KeyPath="yes" />
</Component>
</Directory>
</Directory>
</StandardDirectory>
<!--
The following code creates the `containers/containers.conf.d` folder under the system wide The following code creates the `containers/containers.conf.d` folder under the system wide
`$CommonAppDataFolder`. That's preferred to the user specific `$AppDataFolder` to avoid the `$CommonAppDataFolder`. That's preferred to the user specific `$AppDataFolder` to avoid the
Windows Installer ICE91 warning https://learn.microsoft.com/en-us/windows/win32/msi/ice91. Windows Installer ICE91 warning https://learn.microsoft.com/en-us/windows/win32/msi/ice91.
--> -->
<Directory Id="CommonAppDataFolder"> <StandardDirectory Id="CommonAppDataFolder">
<Directory Id="CONFIGDIR" Name="containers"> <Directory Id="CONFIGDIR" Name="containers">
<Directory Id="ContainersConfigSubDir" Name="containers.conf.d"> <Directory Id="ContainersConfigSubDir" Name="containers.conf.d">
<Component Id="MachineProviderConfigFile" Guid="C32C0040-D9AF-4155-AC7E-465B63B6BE3B"> <Component Id="MachineProviderConfigFile" Guid="C32C0040-D9AF-4155-AC7E-465B63B6BE3B" Condition="CREATE_MACHINE_PROVIDER_CONFIG_FILE">
<CreateFolder /> <CreateFolder />
<IniFile Id="MachineProviderConfigFile" Action="createLine" Directory="ContainersConfigSubDir" Section="machine" Name="99-podman-machine-provider.conf" Key="provider" Value='"[MACHINE_PROVIDER]"' /> <IniFile Id="MachineProviderConfigFile" Action="createLine" Directory="ContainersConfigSubDir" Section="machine" Name="99-podman-machine-provider.conf" Key="provider" Value="&quot;[MACHINE_PROVIDER]&quot;" />
<Condition>CREATE_MACHINE_PROVIDER_CONFIG_FILE</Condition>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="EnvEntries">
<Component Id="EnvEntriesComponent" Guid="b662ec43-0e0e-4018-8bf3-061904bb8f5b" Win64="yes">
<CreateFolder />
<Environment Id='UpdatePath' Name='PATH' Action='set' Permanent='no' System='yes' Part='last' Value='[INSTALLDIR]' />
</Component>
</Directory>
</Directory>
<CustomAction Id="OpenGuide" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> </Component>
<CustomAction Id="CheckWSL" BinaryKey="PodmanHooks" Execute="firstSequence" DllEntry="CheckWSL" /> </Directory>
<CustomAction Id="CheckHyperV" BinaryKey="PodmanHooks" Execute="firstSequence" DllEntry="CheckHyperV" /> </Directory>
<CustomActionRef Id="WixBroadcastEnvironmentChange" /> </StandardDirectory>
<ComponentGroup Id="WSLFeature" Directory="INSTALLDIR"> <Directory Id="EnvEntries">
<Component Id="WSLFeatureComponent" Guid="F6A693BC-186C-4E64-8015-C3073013B3A8"> <Component Id="EnvEntriesComponent" Guid="b662ec43-0e0e-4018-8bf3-061904bb8f5b" Bitness="always64">
<Condition>(NOT Installed) AND WSL_INSTALL = 1</Condition> <CreateFolder />
<CreateFolder /> <Environment Id="UpdatePath" Name="PATH" Action="set" Permanent="no" System="yes" Part="last" Value="[INSTALLDIR]" />
<PanelSW:Dism EnableFeature="VirtualMachinePlatform" ErrorHandling="prompt"/> </Component>
<PanelSW:Dism EnableFeature="Microsoft-Windows-Subsystem-Linux" ErrorHandling="prompt"/> </Directory>
</Component> </Package>
</ComponentGroup>
<ComponentGroup Id="HyperVFeature" Directory="INSTALLDIR">
<Component Id="HyperVFeatureComponent" Guid="F7B2D4C9-6C89-46BB-B4EA-FF39424972F3">
<Condition>(NOT Installed) AND HYPERV_INSTALL = 1</Condition>
<CreateFolder />
<PanelSW:Dism EnableFeature="Microsoft-Hyper-V" ErrorHandling="prompt"/>
</Component>
</ComponentGroup>
<Feature Id="Complete" Level="1">
<ComponentRef Id="INSTALLDIR_Component"/>
<ComponentRef Id="EnvEntriesComponent"/>
<ComponentRef Id="MainExecutable"/>
<ComponentRef Id="WinSshProxyExecutable"/>
<?if $(var.UseGVProxy) != Skip?>
<ComponentRef Id="GvProxyExecutable"/>
<?endif?>
<ComponentRef Id="GuideHTMLComponent"/>
<ComponentRef Id="MachineProviderConfigFile"/>
<ComponentGroupRef Id="ManFiles"/>
<ComponentGroupRef Id="WSLFeature"/>
<ComponentGroupRef Id="HyperVFeature"/>
</Feature>
<Icon Id="podman.ico" SourceFile="resources/podman-logo.ico"/>
<Property Id="ARPPRODUCTICON" Value="podman.ico"/>
<Property Id="WixShellExecTarget" Value="[#GuideHTMLFile]" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Show Getting Started Guide" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<WixVariable Id="WixUIBannerBmp" Value="resources\podman-banner.png" />
<WixVariable Id="WixUIDialogBmp" Value="resources\podman-dialog.png" />
<UIRef Id="PodmanUI"/>
<UI>
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction"
Value="OpenGuide">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
<InstallExecuteSequence>
<Custom Action="CheckWSL" Before="SetWSL_INSTALL" />
<Custom Action="CheckHyperV" Before="SetHYPERV_INSTALL" />
<ForceReboot Before="StopServices">
(NOT Installed)
AND ((WSL_INSTALL = 1) OR (HYPERV_INSTALL = 1))
AND (NOT AFTERREBOOT)
</ForceReboot>
</InstallExecuteSequence>
<Binary Id="PodmanHooks" SourceFile="artifacts/podman-msihooks.dll" />
</Product>
</Wix> </Wix>

View File

@ -111,11 +111,11 @@ try {
} }
Write-Host "Old release, zip does not include win-sshproxy.exe, fetching via msi" Write-Host "Old release, zip does not include win-sshproxy.exe, fetching via msi"
DownloadOrSkip "$base_url/releases/download/$version/podman-$version.msi" "podman.msi" DownloadOrSkip "$base_url/releases/download/$version/podman-$version.msi" "podman.msi"
dark -x expand ./podman.msi wix msi decompile -x expand ./podman.msi
if (!$?) { if (!$?) {
throw "Dark command failed" throw "wix msi decompile command failed"
} }
$loc = Get-ChildItem -Recurse -Path expand -Name 4A2AD125-34E7-4BD8-BE28-B2A9A5EDBEB5 $loc = Get-ChildItem -Recurse -Path expand -Name WinSshProxyExecutableFile
if (!$loc) { if (!$loc) {
throw "Could not obtain win-sshproxy.exe" throw "Could not obtain win-sshproxy.exe"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,4 +1,4 @@
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Fragment> <Fragment>
<UI> <UI>
<Dialog Id="WelcomeInstallDlg" Width="370" Height="270" Title="!(loc.WelcomeDlg_Title)"> <Dialog Id="WelcomeInstallDlg" Width="370" Height="270" Title="!(loc.WelcomeDlg_Title)">
@ -6,44 +6,30 @@
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgTitle)" /> <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgTitle)" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="135" Y="50" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgDescription)" /> <Control Id="Description" Type="Text" X="135" Y="50" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgDescription)" />
<Control Id="ProviderChoice" Type="Text" X="135" Y="115" Width="220" Height="18" Transparent="yes" NoPrefix="yes" Text="Select the Virtualization Provider for the Podman machine:"> <Control Id="ProviderChoice" Type="Text" X="135" Y="115" Width="220" Height="18" Transparent="yes" NoPrefix="yes" Text="Select the Virtualization Provider for the Podman machine:" HideCondition="HIDE_PROVIDER_CHOICE" />
<Condition Action="hide">HIDE_PROVIDER_CHOICE</Condition> <Control Type="RadioButtonGroup" Property="MACHINE_PROVIDER" Id="MachineProviderRadioButtonGroup" Width="226" Height="30" X="135" Y="135" HideCondition="HIDE_PROVIDER_CHOICE">
</Control>
<Control Type="RadioButtonGroup" Property="MACHINE_PROVIDER" Id="MachineProviderRadioButtonGroup" Width="226" Height="30" X="135" Y="135">
<RadioButtonGroup Property="MACHINE_PROVIDER"> <RadioButtonGroup Property="MACHINE_PROVIDER">
<RadioButton Text="Windows Linux Subsystem (WSLv2)" Height="15" Value="wsl" Width="226" X="10" Y="0" /> <RadioButton Text="Windows Linux Subsystem (WSLv2)" Height="15" Value="wsl" Width="226" X="10" Y="0" />
<RadioButton Text="Windows Hyper-V" Height="15" Value="hyperv" Width="226" X="10" Y="15" /> <RadioButton Text="Windows Hyper-V" Height="15" Value="hyperv" Width="226" X="10" Y="15" />
</RadioButtonGroup> </RadioButtonGroup>
<Condition Action="hide">HIDE_PROVIDER_CHOICE</Condition>
</Control>
<Control Id="WSLInstallCheckbox" Type="CheckBox" X="135" Y="190" Width="226" Height="18" CheckBoxValue="1" Property="WSL_INSTALL" Default="no" Text="Install WSL if needed (requires reboot)">
<Condition Action="show">MACHINE_PROVIDER = "wsl"</Condition>
<Condition Action="hide">MACHINE_PROVIDER = "hyperv" OR HIDE_PROVIDER_CHOICE</Condition>
<Condition Action="hide">HAS_WSLFEATURE = 1</Condition>
</Control>
<Control Id="HyperVInstallCheckbox" Type="CheckBox" X="135" Y="190" Width="226" Height="18" CheckBoxValue="1" Property="HYPERV_INSTALL" Default="no" Text="Install Hyper-V if needed (requires reboot)">
<Condition Action="show">MACHINE_PROVIDER = "hyperv"</Condition>
<Condition Action="hide">MACHINE_PROVIDER = "wsl" OR HIDE_PROVIDER_CHOICE</Condition>
<Condition Action="hide">HAS_HYPERVFEATURE = 1</Condition>
</Control> </Control>
<Control Id="WSLInstallCheckbox" Type="CheckBox" X="135" Y="190" Width="226" Height="18" CheckBoxValue="1" Property="WSL_INSTALL" Default="no" Text="Install WSL if needed (requires reboot)" ShowCondition="MACHINE_PROVIDER = &quot;wsl&quot;" HideCondition="(MACHINE_PROVIDER = &quot;hyperv&quot; OR HIDE_PROVIDER_CHOICE) OR (HAS_WSLFEATURE = 1)" />
<Control Id="HyperVInstallCheckbox" Type="CheckBox" X="135" Y="190" Width="226" Height="18" CheckBoxValue="1" Property="HYPERV_INSTALL" Default="no" Text="Install Hyper-V if needed (requires reboot)" ShowCondition="MACHINE_PROVIDER = &quot;hyperv&quot;" HideCondition="(MACHINE_PROVIDER = &quot;wsl&quot; OR HIDE_PROVIDER_CHOICE) OR (HAS_HYPERVFEATURE = 1)" />
<Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" /> <Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" />
<Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Text="!(loc.WelcomeEulaDlgInstall)"> <Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Text="!(loc.WelcomeEulaDlgInstall)">
<Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">!(wix.WixUICostingPopupOptOut) OR CostingComplete = 1</Publish> <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg" Condition="!(wix.WixUICostingPopupOptOut) OR CostingComplete = 1" />
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish> <Publish Event="EndDialog" Value="Return" Condition="OutOfDiskSpace &lt;&gt; 1" />
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish> <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg" Condition="OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST=&quot;P&quot; OR NOT PROMPTROLLBACKCOST)" />
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish> <Publish Event="EndDialog" Value="Return" Condition="OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST=&quot;D&quot;" />
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish> <Publish Event="EnableRollback" Value="False" Condition="OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST=&quot;D&quot;" />
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish> <Publish Event="SpawnDialog" Value="OutOfDiskDlg" Condition="(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST=&quot;F&quot;)" />
</Control> </Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> <Publish Event="SpawnDialog" Value="CancelDlg" />
</Control> </Control>
</Dialog> </Dialog>
</UI> </UI>
<InstallUISequence>
<Show Dialog="WelcomeInstallDlg" Before="ProgressDlg" Overridable="yes">NOT Installed</Show>
</InstallUISequence>
</Fragment> </Fragment>
</Wix> </Wix>