Upgrade installer to WiX v4

This commit is contained in:
Cameron Gutman 2023-07-14 19:55:00 -05:00
parent e60caf06f9
commit 8bf5622d21
9 changed files with 314 additions and 352 deletions

View file

@ -44,7 +44,7 @@ Hosting for Moonlight's Raspberry Pi and L4T package repositories is graciously
* [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/) (Community edition is fine) * [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/) (Community edition is fine)
* Select **MSVC 2019** option during Qt installation. MinGW is not supported. * Select **MSVC 2019** option during Qt installation. MinGW is not supported.
* [7-Zip](https://www.7-zip.org/) (only if building installers for non-development PCs) * [7-Zip](https://www.7-zip.org/) (only if building installers for non-development PCs)
* [WiX Toolset](https://wixtoolset.org/releases/v3-14-0-5722/) v3.14.0.5722 or later (only if building installers for non-development PCs) * Wix 4 .NET Tool (install using `dotnet tool install --global wix`)
### macOS Build Requirements ### macOS Build Requirements
* Qt 6.2 SDK or later * Qt 6.2 SDK or later
@ -72,10 +72,10 @@ Hosting for Moonlight's Raspberry Pi and L4T package repositories is graciously
2. Run `git submodule update --init --recursive` from within `moonlight-qt/` 2. Run `git submodule update --init --recursive` from within `moonlight-qt/`
3. Open the project in Qt Creator or build from qmake on the command line. 3. Open the project in Qt Creator or build from qmake on the command line.
* To build a binary for use on non-development machines, use the scripts in the `scripts` folder. * To build a binary for use on non-development machines, use the scripts in the `scripts` folder.
* For Windows builds, use `scripts\build-arch.bat` and `scripts\generate-bundle.bat`. Execute these scripts from the root of the repository within a Qt command prompt. Ensure WiX and 7-Zip binary directories are in your `%PATH%`. * For Windows builds, use `scripts\build-arch.bat` and `scripts\generate-bundle.bat`. Execute these scripts from the root of the repository within a Qt command prompt. Ensure 7-Zip binary directory is on your `%PATH%`.
* For macOS builds, use `scripts/generate-dmg.sh`. Execute this script from the root of the repository and ensure Qt's `bin` folder is in your `$PATH`. * For macOS builds, use `scripts/generate-dmg.sh`. Execute this script from the root of the repository and ensure Qt's `bin` folder is in your `$PATH`.
* For Steam Link builds, run `scripts/build-steamlink-app.sh` from the root of the repository. * For Steam Link builds, run `scripts/build-steamlink-app.sh` from the root of the repository.
* To build from the command line for development use, run `qmake moonlight-qt.pro` then `make debug` or `make release` * To build from the command line for development use on macOS or Linux, run `qmake moonlight-qt.pro` then `make debug` or `make release`
* To create an embedded build for a single-purpose device, use `qmake "CONFIG+=embedded" moonlight-qt.pro` and build normally. * To create an embedded build for a single-purpose device, use `qmake "CONFIG+=embedded" moonlight-qt.pro` and build normally.
* This build will lack windowed mode, Discord/Help links, and other features that don't make sense on an embedded device. * This build will lack windowed mode, Discord/Help links, and other features that don't make sense on an embedded device.
* For platforms with poor GL performance, add `"CONFIG+=glslow"` to prefer direct KMSDRM rendering over EGL/GLES renderers. Direct KMSDRM rendering can use dedicated YUV/RGB conversion and scaling hardware rather than slower GPU shaders for these operations. * For platforms with poor GL performance, add `"CONFIG+=glslow"` to prefer direct KMSDRM rendering over EGL/GLES renderers. Direct KMSDRM rendering can use dedicated YUV/RGB conversion and scaling hardware rather than slower GPU shaders for these operations.

View file

@ -15,6 +15,7 @@ environment:
FFMPEG_CONFIGURE_ARGS: --enable-pic --disable-static --enable-shared --disable-all --enable-avcodec --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=av1 --enable-nvdec --enable-hwaccel=h264_nvdec --enable-hwaccel=hevc_nvdec --enable-hwaccel=av1_nvdec --enable-hwaccel=h264_vaapi --enable-hwaccel=hevc_vaapi --enable-hwaccel=av1_vaapi --enable-hwaccel=h264_vdpau --enable-hwaccel=hevc_vdpau --enable-hwaccel=av1_vdpau FFMPEG_CONFIGURE_ARGS: --enable-pic --disable-static --enable-shared --disable-all --enable-avcodec --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=av1 --enable-nvdec --enable-hwaccel=h264_nvdec --enable-hwaccel=hevc_nvdec --enable-hwaccel=av1_nvdec --enable-hwaccel=h264_vaapi --enable-hwaccel=hevc_vaapi --enable-hwaccel=av1_vaapi --enable-hwaccel=h264_vdpau --enable-hwaccel=hevc_vdpau --enable-hwaccel=av1_vdpau
install: install:
- cmd: 'dotnet tool install --global wix'
- sh: '[ "$BUILD_TARGET" != macos ] || nvm use node' - sh: '[ "$BUILD_TARGET" != macos ] || nvm use node'
- sh: '[ "$BUILD_TARGET" != macos ] || npm install --global create-dmg' - sh: '[ "$BUILD_TARGET" != macos ] || npm install --global create-dmg'
- sh: '[ "$BUILD_TARGET" != steamlink ] || sudo apt install -y libc6:i386 libstdc++6:i386' - sh: '[ "$BUILD_TARGET" != steamlink ] || sudo apt install -y libc6:i386 libstdc++6:i386'
@ -38,9 +39,9 @@ before_build:
- sh: 'export VERSION=`cat app/version.txt`' - sh: 'export VERSION=`cat app/version.txt`'
build_script: build_script:
- cmd: 'set PATH=%OLDPATH%;%QTDIR%\msvc2019_64\bin;%ProgramFiles(x86)%\WiX Toolset v3.11\bin' - cmd: 'set PATH=%OLDPATH%;%QTDIR%\msvc2019_64\bin'
- cmd: 'scripts\build-arch.bat Release' - cmd: 'scripts\build-arch.bat Release'
- cmd: 'set PATH=%OLDPATH%;%QTDIR%\msvc2019\bin;%ProgramFiles(x86)%\WiX Toolset v3.11\bin' - cmd: 'set PATH=%OLDPATH%;%QTDIR%\msvc2019\bin'
- cmd: 'scripts\build-arch.bat Release' - cmd: 'scripts\build-arch.bat Release'
- cmd: 'scripts\generate-bundle.bat Release' - cmd: 'scripts\generate-bundle.bat Release'
- sh: '[ "$BUILD_TARGET" != linux ] || source /opt/qt515/bin/qt515-env.sh' - sh: '[ "$BUILD_TARGET" != linux ] || source /opt/qt515/bin/qt515-env.sh'

View file

@ -193,17 +193,9 @@ echo Deleting original QML files
forfiles /p %DEPLOY_FOLDER% /m *.qml /s /c "cmd /c del @path" forfiles /p %DEPLOY_FOLDER% /m *.qml /s /c "cmd /c del @path"
if !ERRORLEVEL! NEQ 0 goto Error if !ERRORLEVEL! NEQ 0 goto Error
echo Harvesting files for WiX
"%WIX%\bin\heat" dir %DEPLOY_FOLDER% -srd -sfrag -ag -sw5150 -cg MoonlightDependencies -var var.SourceDir -dr INSTALLFOLDER -out %BUILD_FOLDER%\Dependencies.wxs
if !ERRORLEVEL! NEQ 0 goto Error
echo Copying application binary to deployment directory
copy %BUILD_FOLDER%\app\%BUILD_CONFIG%\Moonlight.exe %DEPLOY_FOLDER%
if !ERRORLEVEL! NEQ 0 goto Error
if "%SIGN%"=="1" ( if "%SIGN%"=="1" (
echo Signing deployed binaries echo Signing deployed binaries
set FILES_TO_SIGN= set FILES_TO_SIGN=%BUILD_FOLDER%\app\%BUILD_CONFIG%\Moonlight.exe
for /r "%DEPLOY_FOLDER%" %%f in (*.dll *.exe) do ( for /r "%DEPLOY_FOLDER%" %%f in (*.dll *.exe) do (
set FILES_TO_SIGN=!FILES_TO_SIGN! %%f set FILES_TO_SIGN=!FILES_TO_SIGN! %%f
) )
@ -227,6 +219,10 @@ if "%SIGN%"=="1" (
if !ERRORLEVEL! NEQ 0 goto Error if !ERRORLEVEL! NEQ 0 goto Error
) )
echo Copying application binary to deployment directory
copy %BUILD_FOLDER%\app\%BUILD_CONFIG%\Moonlight.exe %DEPLOY_FOLDER%
if !ERRORLEVEL! NEQ 0 goto Error
echo Building portable package echo Building portable package
rem This must be done after WiX harvesting and signing, since the VCRT dlls are MS signed rem This must be done after WiX harvesting and signing, since the VCRT dlls are MS signed
rem and should not be harvested for inclusion in the full installer rem and should not be harvested for inclusion in the full installer

View file

@ -18,11 +18,11 @@ function Print-WixForArch([string]$Arch) {
$targetSize = (Get-Item $file).Length $targetSize = (Get-Item $file).Length
$targetVersion = (Get-Command $file).Version $targetVersion = (Get-Command $file).Version
$targetSha1 = (Get-FileHash -Path $file -Algorithm SHA1).Hash $targetSha512 = (Get-FileHash -Path $file -Algorithm SHA512).Hash
Write-Output "<?define VCREDIST_VER = `"$targetVersion`" ?>" Write-Output "<?define VCREDIST_VER = `"$targetVersion`" ?>"
Write-Output "<?define VCREDIST_$($Arch)_SIZE = `"$targetSize`" ?>" Write-Output "<?define VCREDIST_$($Arch)_SIZE = `"$targetSize`" ?>"
Write-Output "<?define VCREDIST_$($Arch)_SHA1 = `"$targetSha1`" ?>" Write-Output "<?define VCREDIST_$($Arch)_SHA512 = `"$targetSha512`" ?>"
Write-Output "<?define VCREDIST_$($Arch)_URL = `"$targetUrl`" ?>" Write-Output "<?define VCREDIST_$($Arch)_URL = `"$targetUrl`" ?>"
Write-Output "<?define VCREDIST_$($Arch)_UPGRADE_CODE = `"$($UpgradeCodes[$Arch])`" ?>" Write-Output "<?define VCREDIST_$($Arch)_UPGRADE_CODE = `"$($UpgradeCodes[$Arch])`" ?>"

View file

@ -1,13 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <Project Sdk="WixToolset.Sdk/4.0.1" ToolsVersion="4.0">
<Project ToolsVersion="4.0" DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProductVersion>3.10</ProductVersion>
<ProjectGuid>8468ef94-3bb8-47a5-af15-0e314afe664d</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>Moonlight</OutputName>
<OutputType>Package</OutputType>
<DefineSolutionProperties>false</DefineSolutionProperties>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DefineConstants>Debug</DefineConstants> <DefineConstants>Debug</DefineConstants>
</PropertyGroup> </PropertyGroup>
@ -16,33 +7,22 @@
<IntermediateOutputPath>$(BUILD_FOLDER)\</IntermediateOutputPath> <IntermediateOutputPath>$(BUILD_FOLDER)\</IntermediateOutputPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<DefineConstants>SourceDir=$(DEPLOY_FOLDER)</DefineConstants> <DefineConstants>DeployDir=$(DEPLOY_FOLDER);BuildDir=$(BUILD_FOLDER)</DefineConstants>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Product.wxs" /> <HarvestDirectory Include="$(DEPLOY_FOLDER)">
<Compile Include="$(BUILD_FOLDER)\Dependencies.wxs" /> <ComponentGroupName>MoonlightDependencies</ComponentGroupName>
<DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
<PreprocessorVariable>DeployDir</PreprocessorVariable>
<SuppressRootDirectory>true</SuppressRootDirectory>
<SuppressCom>true</SuppressCom>
<SuppressRegistry>true</SuppressRegistry>
</HarvestDirectory>
<BindPath Include="$(DEPLOY_FOLDER)" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<WixExtension Include="WixFirewallExtension"> <PackageReference Include="WixToolset.Firewall.wixext" Version="4.*" />
<HintPath>$(WixExtDir)\WixFirewallExtension.dll</HintPath> <PackageReference Include="WixToolset.Util.wixext" Version="4.*" />
<Name>WixFirewallExtension</Name> <PackageReference Include="WixToolset.Heat" />
</WixExtension>
<WixExtension Include="WixUtilExtension">
<HintPath>$(WixExtDir)\WixUtilExtension.dll</HintPath>
<Name>WixUtilExtension</Name>
</WixExtension>
</ItemGroup> </ItemGroup>
<Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' " />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets') " />
<Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
<Error Text="The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" />
</Target>
<!--
To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Wix.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project> </Project>

View file

@ -1,117 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?> <?define ShortName = "Moonlight" ?>
<?define ShortName = "Moonlight" ?>
<?define FullName = "Moonlight Game Streaming Client" ?> <?define FullName = "Moonlight Game Streaming Client" ?>
<?define ShortcutName = "$(var.ShortName)" ?> <?define ShortcutName = "$(var.ShortName)" ?>
<?define ShortcutDesc = "Stream games and other applications from another PC" ?> <?define ShortcutDesc = "Stream games and other applications from another PC" ?>
<?define InstallFolder = "Moonlight Game Streaming" ?> <?define InstallFolder = "Moonlight Game Streaming" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fire="http://wixtoolset.org/schemas/v4/wxs/firewall" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
xmlns:fire="http://schemas.microsoft.com/wix/FirewallExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" <Package Name="$(var.FullName)"
Name="$(var.FullName)" Language="1033"
Language="1033" Version="!(bind.fileVersion.MoonlightExe)"
Version="!(bind.fileVersion.MoonlightExe)" Manufacturer="Moonlight Game Streaming Project"
Manufacturer="Moonlight Game Streaming Project" UpgradeCode="5c09f94e-f809-4c6a-9b7b-597c99f041fe">
UpgradeCode="5c09f94e-f809-4c6a-9b7b-597c99f041fe"> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallInitialize" />
<Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallInitialize" />
<MediaTemplate CompressionLevel="high" EmbedCab="yes" /> <MediaTemplate CompressionLevel="high" EmbedCab="yes" />
<Property Id="MPSSVC_START"> <Property Id="MPSSVC_START">
<RegistrySearch Id="MpsSvcStart" <RegistrySearch Id="MpsSvcStart"
Root="HKLM" Root="HKLM"
Key="System\CurrentControlSet\Services\MpsSvc" Key="System\CurrentControlSet\Services\MpsSvc"
Name="Start" Name="Start"
Type="raw" /> Type="raw" />
</Property> </Property>
<Condition Message="Setup cannot proceed because the Windows Firewall service has been improperly disabled or stopped. You must start the Windows Firewall service (MpsSvc) to continue. If you would like to disable Windows Firewall properly, use the Windows Firewall options in Control Panel."> <Launch Condition="Installed OR MPSSVC_START=&quot;#2&quot;"
<![CDATA[Installed OR MPSSVC_START="#2"]]> Message="Setup cannot proceed because the Windows Firewall service has been improperly disabled or stopped. You must start the Windows Firewall service (MpsSvc) to continue. If you would like to disable Windows Firewall properly, use the Windows Firewall options in Control Panel." />
</Condition>
<?if $(var.Platform) = x64 Or $(var.Platform) = arm64 ?> <Property Id="APPDATAFOLDER" Value="%LOCALAPPDATA%\Moonlight Game Streaming Project" />
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="DesktopFolder" />
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="INSTALLFOLDER" Name="$(var.InstallFolder)" />
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="$(var.InstallFolder)" />
</Directory>
</Directory>
<Property Id="APPDATAFOLDER">%LOCALAPPDATA%\Moonlight Game Streaming Project</Property>
<!-- There's no way to delete a registry key on uninstall but not major upgrade, so <!-- There's no way to delete a registry key on uninstall but not major upgrade, so
we have to roll our own deletion via custom action --> we have to roll our own deletion via custom action -->
<CustomAction Id="DeleteRegistryKey" <CustomAction Id="DeleteRegistryKey"
Directory="$(var.PlatformProgramFilesFolder)" Directory="ProgramFiles6432Folder"
ExeCommand="reg.exe delete &quot;HKCU\Software\Moonlight Game Streaming Project&quot; /f" ExeCommand="reg.exe delete &quot;HKCU\Software\Moonlight Game Streaming Project&quot; /f"
Execute="deferred" Execute="deferred"
Return="ignore" Return="ignore"
Impersonate="yes"/> Impersonate="yes" />
<InstallExecuteSequence> <InstallExecuteSequence>
<Custom Action="DeleteRegistryKey" Before="InstallFinalize">Installed AND REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE</Custom> <Custom Action="DeleteRegistryKey"
Before="InstallFinalize"
Condition="Installed AND REMOVE~=&quot;ALL&quot; AND NOT UPGRADINGPRODUCTCODE" />
</InstallExecuteSequence> </InstallExecuteSequence>
<Component Id="MoonlightShortcuts" Guid="*" Directory="INSTALLFOLDER"> <Component Id="MoonlightShortcuts" Directory="INSTALLFOLDER">
<Shortcut Id="StartMenuShortcut" <Shortcut Id="StartMenuShortcut"
Name="$(var.ShortcutName)" Name="$(var.ShortcutName)"
Description="$(var.ShortcutDesc)" Description="$(var.ShortcutDesc)"
Target="[#MoonlightExe]" Target="[#MoonlightExe]"
Directory="ApplicationProgramsFolder" Directory="ApplicationProgramsFolder"
WorkingDirectory="INSTALLFOLDER" /> WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="CleanupStartMenuShortcut" Directory="ApplicationProgramsFolder" On="uninstall" /> <RemoveFolder Id="CleanupStartMenuShortcut"
<util:RemoveFolderEx Id="CleanupAppDataFolder" On="uninstall" Property="APPDATAFOLDER" /> Directory="ApplicationProgramsFolder"
<RegistryValue Root="HKCU" Key="Software\Moonlight Game Streaming Project" Name="Installed" Type="integer" Value="1" KeyPath="yes" /> On="uninstall" />
<util:RemoveFolderEx Id="CleanupAppDataFolder"
On="uninstall"
Property="APPDATAFOLDER" />
<RegistryValue Root="HKCU"
Key="Software\Moonlight Game Streaming Project"
Name="Installed"
Type="integer"
Value="1"
KeyPath="yes" />
</Component> </Component>
<Component Id="MoonlightDesktopShortcut" Guid="*" Directory="INSTALLFOLDER"> <Component Id="MoonlightDesktopShortcut" Directory="INSTALLFOLDER" Condition="ADDDESKTOPSHORTCUT=1">
<Shortcut Id="DesktopShortcut" <Shortcut Id="DesktopShortcut"
Name="$(var.ShortcutName)" Name="$(var.ShortcutName)"
Description="$(var.ShortcutDesc)" Description="$(var.ShortcutDesc)"
Target="[#MoonlightExe]" Target="[#MoonlightExe]"
Directory="DesktopFolder" Directory="DesktopFolder"
WorkingDirectory="INSTALLFOLDER" /> WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="CleanupDesktopShortcut" Directory="DesktopFolder" On="uninstall" /> <RemoveFolder Id="CleanupDesktopShortcut"
Directory="DesktopFolder"
On="uninstall" />
<RegistryValue Root="HKCU" <RegistryValue Root="HKCU"
Key="Software\Moonlight Game Streaming Project" Key="Software\Moonlight Game Streaming Project"
Name="DesktopShortcutInstalled" Name="DesktopShortcutInstalled"
Type="integer" Type="integer"
Value="1" Value="1"
KeyPath="yes" /> KeyPath="yes" />
<Condition>ADDDESKTOPSHORTCUT=1</Condition>
</Component> </Component>
<!-- Persist desktop shortcut's installed state to let Bundle.wxs know if <!-- Persist desktop shortcut's installed state to let Bundle.wxs know if
the desktop shortcut should installed by default when upgrading the the desktop shortcut should installed by default when upgrading the
product --> product -->
<Component Id="MoonlightDesktopShortcutState" Guid="*" Directory="INSTALLFOLDER"> <Component Id="MoonlightDesktopShortcutState" Directory="INSTALLFOLDER">
<RegistryValue Root="HKCU" <RegistryValue Root="HKCU"
Key="Software\Moonlight Game Streaming Project" Key="Software\Moonlight Game Streaming Project"
Name="DesktopShortcutInstallState" Name="DesktopShortcutInstallState"
Type="integer" Type="integer"
Value="[ADDDESKTOPSHORTCUT]" Value="[ADDDESKTOPSHORTCUT]"
KeyPath="yes" /> KeyPath="yes" />
</Component> </Component>
<DirectoryRef Id="INSTALLFOLDER"> <DirectoryRef Id="INSTALLFOLDER">
<Component Id="Moonlight" Guid="*"> <Component Id="Moonlight">
<File Id="MoonlightExe" KeyPath="yes" Checksum="yes" Source="$(var.SourceDir)\Moonlight.exe"> <File Id="MoonlightExe"
KeyPath="yes"
Checksum="yes"
Source="$(var.BuildDir)\app\$(var.Configuration)\Moonlight.exe">
<fire:FirewallException Id="MoonlightFirewallException" <fire:FirewallException Id="MoonlightFirewallException"
Scope="any" Scope="any"
Name="$(var.FullName)" /> Name="$(var.FullName)" />
</File> </File>
</Component> </Component>
</DirectoryRef> </DirectoryRef>
@ -123,5 +113,13 @@
<ComponentRef Id="MoonlightDesktopShortcut" /> <ComponentRef Id="MoonlightDesktopShortcut" />
<ComponentGroupRef Id="MoonlightDependencies" /> <ComponentGroupRef Id="MoonlightDependencies" />
</Feature> </Feature>
</Product>
<StandardDirectory Id="DesktopFolder" />
<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="INSTALLFOLDER" Name="$(var.InstallFolder)" />
</StandardDirectory>
<StandardDirectory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="$(var.InstallFolder)" />
</StandardDirectory>
</Package>
</Wix> </Wix>

View file

@ -1,41 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?> <!-- This block is autogenerated using scripts\update-msvcredist.ps1 -->
<?define VCREDIST_VER = "14.36.32532.0" ?>
<!-- This block is autogenerated using scripts\update-msvcredist.ps1 --> <?define VCREDIST_X86_SIZE = "13837672" ?>
<?define VCREDIST_VER = "14.34.31938.0" ?> <?define VCREDIST_X86_SHA512 = "EC70786704EAD0494FAB8F7A9F46554FEACA45C79B831C5963ECC20243FA0F31053B6E0CEB450F86C16E67E739C4BE53AD202C2397C8541365B7252904169B41" ?>
<?define VCREDIST_X86_SIZE = "13838816" ?> <?define VCREDIST_X86_URL = "https://download.visualstudio.microsoft.com/download/pr/eaab1f82-787d-4fd7-8c73-f782341a0c63/5365A927487945ECB040E143EA770ADBB296074ECE4021B1D14213BDE538C490/VC_redist.x86.exe" ?>
<?define VCREDIST_X86_SHA1 = "663399541A7D3BB1B5EA0E57A00C024E50D8506C" ?>
<?define VCREDIST_X86_URL = "https://download.visualstudio.microsoft.com/download/pr/b2519016-4a13-4120-936c-cae003d567c4/8AE59D82845159DB3A70763F5CB1571E45EBF6A1ADFECC47574BA17B019483A0/VC_redist.x86.exe" ?>
<?define VCREDIST_X86_UPGRADE_CODE = "65E5BD06-6392-3027-8C26-853107D3CF1A" ?> <?define VCREDIST_X86_UPGRADE_CODE = "65E5BD06-6392-3027-8C26-853107D3CF1A" ?>
<?define VCREDIST_X64_SIZE = "25490328" ?> <?define VCREDIST_X64_SIZE = "25355496" ?>
<?define VCREDIST_X64_SHA1 = "4DE9F6681F0F213B132DEF3AF88A3C68483F5F32" ?> <?define VCREDIST_X64_SHA512 = "70A888D5891EFD2A48D33C22F35E9178BD113032162DC5A170E7C56F2D592E3C59A08904B9F1B54450C80F8863BDA746E431B396E4C1624B91FF15DD701BD939" ?>
<?define VCREDIST_X64_URL = "https://download.visualstudio.microsoft.com/download/pr/8b92f460-7e03-4c75-a139-e264a770758d/26C2C72FBA6438F5E29AF8EBC4826A1E424581B3C446F8C735361F1DB7BEFF72/VC_redist.x64.exe" ?> <?define VCREDIST_X64_URL = "https://download.visualstudio.microsoft.com/download/pr/eaab1f82-787d-4fd7-8c73-f782341a0c63/917C37D816488545B70AFFD77D6E486E4DD27E2ECE63F6BBAAF486B178B2B888/VC_redist.x64.exe" ?>
<?define VCREDIST_X64_UPGRADE_CODE = "36F68A90-239C-34DF-B58C-64B30153CE35" ?> <?define VCREDIST_X64_UPGRADE_CODE = "36F68A90-239C-34DF-B58C-64B30153CE35" ?>
<?define VCREDIST_ARM64_SIZE = "11654656" ?> <?define VCREDIST_ARM64_SIZE = "11511496" ?>
<?define VCREDIST_ARM64_SHA1 = "269C5ED4275557677B0A306761DE022CCEF54E1F" ?> <?define VCREDIST_ARM64_SHA512 = "5A70C09060DED33EE9129728C97AD0E9B70BE5010706FB59817359D189E87F5A599DFFF5070A10A48404C511C6395A8B5C69BF6FFFA5DD2B4DE083EF1265CFB8" ?>
<?define VCREDIST_ARM64_URL = "https://download.visualstudio.microsoft.com/download/pr/b2519016-4a13-4120-936c-cae003d567c4/EC530B52C87AF9DBECBCCE83E5945FD0CAA57969A858D7497E4D5CBBD6F53F60/VC_redist.arm64.exe" ?> <?define VCREDIST_ARM64_URL = "https://download.visualstudio.microsoft.com/download/pr/eaab1f82-787d-4fd7-8c73-f782341a0c63/37342E0ABDAEAE0297F64A889F842AC9453139639FB0178C0754A7D2F330043A/VC_redist.arm64.exe" ?>
<?define VCREDIST_ARM64_UPGRADE_CODE = "DC9BAE42-810B-423A-9E25-E4073F1C7B00" ?> <?define VCREDIST_ARM64_UPGRADE_CODE = "DC9BAE42-810B-423A-9E25-E4073F1C7B00" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" <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">
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="Moonlight Game Streaming Client" <Bundle Name="Moonlight Game Streaming Client"
Version="!(bind.PackageVersion.Moonlight_x64)" Version="!(bind.PackageVersion.Moonlight_x64)"
Manufacturer="Moonlight Game Streaming Project" Manufacturer="Moonlight Game Streaming Project"
UpgradeCode="466fa35d-4be4-40ef-9ce5-afadc3b63bc5" UpgradeCode="466fa35d-4be4-40ef-9ce5-afadc3b63bc5"
HelpUrl="https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide" HelpUrl="https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide"
UpdateUrl="https://github.com/moonlight-stream/moonlight-qt/releases" UpdateUrl="https://github.com/moonlight-stream/moonlight-qt/releases"
DisableModify="yes" DisableModify="yes"
IconSourceFile="..\..\app\moonlight.ico"> IconSourceFile="..\..\app\moonlight.ico">
<bal:Condition Message="Moonlight requires Windows 7 or later."> <bal:Condition Message="Moonlight requires Windows 7 or later." Condition="VersionNT &gt;= v6.1" />
<![CDATA[VersionNT >= v6.1]]>
</bal:Condition>
<!-- HACK: Force replacement of lower versioned files too. This is only safe because we don't install any shared files --> <Variable Name="InstallFolder" Type="formatted" Value="[ProgramFiles6432Folder]Moonlight Game Streaming" />
<Variable Name="REINSTALLMODE" bal:Overridable="yes" Value="dmus" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFiles6432Folder]Moonlight Game Streaming" />
<!-- Define "Add desktop shortcut" -checkbox's state by defining a variable <!-- Define "Add desktop shortcut" -checkbox's state by defining a variable
which has same name as the checkbox has. Value 1 means that checkbox which has same name as the checkbox has. Value 1 means that checkbox
@ -44,102 +35,90 @@
<Variable Name="AddDesktopShortcutCheckbox" Type="numeric" Value="1" /> <Variable Name="AddDesktopShortcutCheckbox" Type="numeric" Value="1" />
<!-- Get checkbox's state from registry if present. The registry value <!-- Get checkbox's state from registry if present. The registry value
"DesktopShortcutInstallState" is set in Product.wxs. --> "DesktopShortcutInstallState" is set in Product.wxs. -->
<util:RegistrySearch Variable="HasDesktopShortcutInstallStateRegKey" <util:RegistrySearch Variable="HasDesktopShortcutInstallStateRegKey" Root="HKCU" Key="Software\Moonlight Game Streaming Project" Value="DesktopShortcutInstallState" Result="exists" />
Root="HKCU" <util:RegistrySearch Variable="AddDesktopShortcutCheckbox" Root="HKCU" Key="Software\Moonlight Game Streaming Project" Value="DesktopShortcutInstallState" Condition="HasDesktopShortcutInstallStateRegKey" />
Key="Software\Moonlight Game Streaming Project"
Value="DesktopShortcutInstallState"
Result="exists" />
<util:RegistrySearch Variable="AddDesktopShortcutCheckbox"
Root="HKCU"
Key="Software\Moonlight Game Streaming Project"
Value="DesktopShortcutInstallState"
Condition="HasDesktopShortcutInstallStateRegKey" />
<util:ProductSearch Id="VCREDIST_14_x86" <util:ProductSearch Id="VCREDIST_14_x86"
UpgradeCode="$(var.VCREDIST_X86_UPGRADE_CODE)" UpgradeCode="$(var.VCREDIST_X86_UPGRADE_CODE)"
Result="version" Result="version"
Variable="VCREDIST_14_x86" /> Variable="VCREDIST_14_x86" />
<util:ProductSearch Id="VCREDIST_14_x64" <util:ProductSearch Id="VCREDIST_14_x64"
UpgradeCode="$(var.VCREDIST_X64_UPGRADE_CODE)" UpgradeCode="$(var.VCREDIST_X64_UPGRADE_CODE)"
Result="version" Result="version"
Variable="VCREDIST_14_x64" /> Variable="VCREDIST_14_x64" />
<util:ProductSearch Id="VCREDIST_14_ARM64" <util:ProductSearch Id="VCREDIST_14_ARM64"
UpgradeCode="$(var.VCREDIST_ARM64_UPGRADE_CODE)" UpgradeCode="$(var.VCREDIST_ARM64_UPGRADE_CODE)"
Result="version" Result="version"
Variable="VCREDIST_14_ARM64" /> Variable="VCREDIST_14_ARM64" />
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> <BootstrapperApplication>
<bal:WixStandardBootstrapperApplication <bal:WixStandardBootstrapperApplication ShowVersion="yes"
ShowVersion="yes" LicenseFile="license.rtf"
LicenseFile="license.rtf" LogoFile="..\..\app\moonlight_wix.png"
LogoFile="..\..\app\moonlight_wix.png" LaunchTarget="[InstallFolder]\Moonlight.exe"
ShowFilesInUse="yes" ThemeFile="RtfTheme.xml"
LaunchTarget="[InstallFolder]\Moonlight.exe" Theme="rtfLicense" />
ThemeFile="RtfTheme.xml" /> </BootstrapperApplication>
</BootstrapperApplicationRef>
<Chain> <Chain>
<ExePackage Name="Microsoft Visual C++ 2015-2022 Redistributable - x86" <ExePackage Cache="remove"
Cache="no" PerMachine="yes"
Compressed="no" Permanent="yes"
PerMachine="yes" Vital="yes"
Permanent="yes" InstallCondition="(NOT VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 332)"
Vital="yes" DetectCondition="VCREDIST_14_x86 &gt;= v$(var.VCREDIST_VER)"
InstallCommand="/install /quiet /norestart" InstallArguments="/install /quiet /norestart">
DownloadUrl="$(var.VCREDIST_X86_URL)"
InstallCondition="(NOT VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 332)"
DetectCondition="VCREDIST_14_x86 &gt;= v$(var.VCREDIST_VER)">
<RemotePayload Description="Microsoft Visual C++ 2015-2022 Redistributable - x86" <ExePackagePayload Description="Microsoft Visual C++ 2015-2022 Redistributable - x86"
ProductName="Microsoft Visual C++ 2015-2022 Redistributable - x86" ProductName="Microsoft Visual C++ 2015-2022 Redistributable - x86"
Size="$(var.VCREDIST_X86_SIZE)" Size="$(var.VCREDIST_X86_SIZE)"
Version="$(var.VCREDIST_VER)" Version="$(var.VCREDIST_VER)"
Hash="$(var.VCREDIST_X86_SHA1)"/> Hash="$(var.VCREDIST_X86_SHA512)"
Name="VC_redist.x86.exe"
DownloadUrl="$(var.VCREDIST_X86_URL)" />
<!-- Newer version installed is fine --> <!-- Newer version installed is fine -->
<ExitCode Value="1638" Behavior="success" /> <ExitCode Value="1638" Behavior="success" />
</ExePackage> </ExePackage>
<ExePackage Name="Microsoft Visual C++ 2015-2022 Redistributable - x64" <ExePackage Cache="remove"
Cache="no" PerMachine="yes"
Compressed="no" Permanent="yes"
PerMachine="yes" Vital="yes"
Permanent="yes"
Vital="yes"
InstallCommand="/install /quiet /norestart"
DownloadUrl="$(var.VCREDIST_X64_URL)"
InstallCondition="(VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 34404)" InstallCondition="(VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 34404)"
DetectCondition="VCREDIST_14_x64 &gt;= v$(var.VCREDIST_VER)"> DetectCondition="VCREDIST_14_x64 &gt;= v$(var.VCREDIST_VER)"
InstallArguments="/install /quiet /norestart">
<RemotePayload Description="Microsoft Visual C++ 2015-2022 Redistributable - x64" <ExePackagePayload Description="Microsoft Visual C++ 2015-2022 Redistributable - x64"
ProductName="Microsoft Visual C++ 2015-2022 Redistributable - x64" ProductName="Microsoft Visual C++ 2015-2022 Redistributable - x64"
Size="$(var.VCREDIST_X64_SIZE)" Size="$(var.VCREDIST_X64_SIZE)"
Version="$(var.VCREDIST_VER)" Version="$(var.VCREDIST_VER)"
Hash="$(var.VCREDIST_X64_SHA1)"/> Hash="$(var.VCREDIST_X64_SHA512)"
Name="VC_redist.x64.exe"
DownloadUrl="$(var.VCREDIST_X64_URL)" />
<!-- Newer version installed is fine --> <!-- Newer version installed is fine -->
<ExitCode Value="1638" Behavior="success" /> <ExitCode Value="1638" Behavior="success" />
</ExePackage> </ExePackage>
<?if $(var.INCLUDE_ARM64) != 0 ?> <?if $(var.INCLUDE_ARM64) != 0 ?>
<ExePackage Name="Microsoft Visual C++ 2015-2022 Redistributable - ARM64" <ExePackage Cache="remove"
Cache="no" PerMachine="yes"
Compressed="no" Permanent="yes"
PerMachine="yes" Vital="yes"
Permanent="yes"
Vital="yes"
InstallCommand="/install /quiet /norestart"
DownloadUrl="$(var.VCREDIST_ARM64_URL)"
InstallCondition="NativeMachine = 43620" InstallCondition="NativeMachine = 43620"
DetectCondition="VCREDIST_14_ARM64 &gt;= v$(var.VCREDIST_VER)"> DetectCondition="VCREDIST_14_ARM64 &gt;= v$(var.VCREDIST_VER)"
InstallArguments="/install /quiet /norestart">
<RemotePayload Description="Microsoft Visual C++ 2015-2022 Redistributable - ARM64" <ExePackagePayload Description="Microsoft Visual C++ 2015-2022 Redistributable - ARM64"
ProductName="Microsoft Visual C++ 2015-2022 Redistributable - ARM64" ProductName="Microsoft Visual C++ 2015-2022 Redistributable - ARM64"
Size="$(var.VCREDIST_ARM64_SIZE)" Size="$(var.VCREDIST_ARM64_SIZE)"
Version="$(var.VCREDIST_VER)" Version="$(var.VCREDIST_VER)"
Hash="$(var.VCREDIST_ARM64_SHA1)"/> Hash="$(var.VCREDIST_ARM64_SHA512)"
Name="VC_redist.arm64.exe"
DownloadUrl="$(var.VCREDIST_ARM64_URL)" />
<!-- Newer version installed is fine --> <!-- Newer version installed is fine -->
<ExitCode Value="1638" Behavior="success" /> <ExitCode Value="1638" Behavior="success" />
@ -147,30 +126,30 @@
<?endif?> <?endif?>
<MsiPackage Id="Moonlight_x86" <MsiPackage Id="Moonlight_x86"
SourceFile="$(env.BUILD_ROOT)\build-x86-$(env.BUILD_CONFIG)\Moonlight.msi" SourceFile="$(env.BUILD_ROOT)\build-x86-$(env.BUILD_CONFIG)\Moonlight.msi"
InstallCondition="(NOT VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 332)" Name="Moonlight_x86.msi"
Vital="yes"> InstallCondition="(NOT VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 332)"
Vital="yes">
<MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" /> <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" />
<MsiProperty Name="REINSTALLMODE" Value="[REINSTALLMODE]" />
<MsiProperty Name="ADDDESKTOPSHORTCUT" Value="[AddDesktopShortcutCheckbox]" /> <MsiProperty Name="ADDDESKTOPSHORTCUT" Value="[AddDesktopShortcutCheckbox]" />
</MsiPackage> </MsiPackage>
<MsiPackage Id="Moonlight_x64" <MsiPackage Id="Moonlight_x64"
SourceFile="$(env.BUILD_ROOT)\build-x64-$(env.BUILD_CONFIG)\Moonlight.msi" SourceFile="$(env.BUILD_ROOT)\build-x64-$(env.BUILD_CONFIG)\Moonlight.msi"
Name="Moonlight_x64.msi"
InstallCondition="(VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 34404)" InstallCondition="(VersionNT64 AND NOT NativeMachine) OR (NativeMachine = 34404)"
Vital="yes"> Vital="yes">
<MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" /> <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" />
<MsiProperty Name="REINSTALLMODE" Value="[REINSTALLMODE]" />
<MsiProperty Name="ADDDESKTOPSHORTCUT" Value="[AddDesktopShortcutCheckbox]" /> <MsiProperty Name="ADDDESKTOPSHORTCUT" Value="[AddDesktopShortcutCheckbox]" />
</MsiPackage> </MsiPackage>
<?if $(var.INCLUDE_ARM64) != 0 ?> <?if $(var.INCLUDE_ARM64) != 0 ?>
<MsiPackage Id="Moonlight_arm64" <MsiPackage Id="Moonlight_arm64"
SourceFile="$(env.BUILD_ROOT)\build-arm64-$(env.BUILD_CONFIG)\Moonlight.msi" SourceFile="$(env.BUILD_ROOT)\build-arm64-$(env.BUILD_CONFIG)\Moonlight.msi"
Name="Moonlight_arm64.msi"
InstallCondition="NativeMachine = 43620" InstallCondition="NativeMachine = 43620"
Vital="yes"> Vital="yes">
<MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" /> <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" />
<MsiProperty Name="REINSTALLMODE" Value="[REINSTALLMODE]" />
<MsiProperty Name="ADDDESKTOPSHORTCUT" Value="[AddDesktopShortcutCheckbox]" /> <MsiProperty Name="ADDDESKTOPSHORTCUT" Value="[AddDesktopShortcutCheckbox]" />
</MsiPackage> </MsiPackage>
<?endif?> <?endif?>

View file

@ -1,12 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <Project Sdk="WixToolset.Sdk/4.0.1">
<Project ToolsVersion="4.0" DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<ProductVersion>3.10</ProductVersion>
<ProjectGuid>466fa35d-4be4-40ef-9ce5-afadc3b63bc5</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>MoonlightSetup</OutputName>
<OutputType>Bundle</OutputType> <OutputType>Bundle</OutputType>
<DefineSolutionProperties>false</DefineSolutionProperties>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DefineConstants>Debug</DefineConstants> <DefineConstants>Debug</DefineConstants>
@ -16,29 +10,7 @@
<IntermediateOutputPath>$(BUILD_FOLDER)\</IntermediateOutputPath> <IntermediateOutputPath>$(BUILD_FOLDER)\</IntermediateOutputPath>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Bundle.wxs" /> <PackageReference Include="WixToolset.Bal.wixext" Version="4.*" />
<PackageReference Include="WixToolset.Util.wixext" Version="4.*" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<WixExtension Include="WixBalExtension">
<HintPath>$(WixExtDir)\WixBalExtension.dll</HintPath>
<Name>WixBalExtension</Name>
</WixExtension>
<WixExtension Include="WixUtilExtension">
<HintPath>$(WixExtDir)\WixUtilExtension.dll</HintPath>
<Name>WixUtilExtension</Name>
</WixExtension>
</ItemGroup>
<Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' " />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets" Condition=" '$(WixTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets') " />
<Target Name="EnsureWixToolsetInstalled" Condition=" '$(WixTargetsImported)' != 'true' ">
<Error Text="The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" />
</Target>
<!--
To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Wix.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project> </Project>

View file

@ -1,88 +1,124 @@
<?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. See LICENSE.TXT file in the project root for full license information. --> <!-- 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 file has been copied from C:\Program Files (x86)\WiX Toolset v3.11\SDK\themes\RtfTheme.xml and then altered. --> <!-- This file has been copied from https://github.com/wixtoolset/wix/blob/cef14c6055f85e470ff9ce7a33b53e80d1160ba6/src/ext/Bal/wixstdba/Resources/RtfTheme.xml and then altered. -->
<Theme xmlns="http://wixtoolset.org/schemas/thmutil/2010"> <Theme xmlns="http://wixtoolset.org/schemas/v4/thmutil">
<Window Width="485" Height="300" HexStyle="100a0000" FontId="0">#(loc.Caption)</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="FFFFFF" Underline="yes">Segoe UI</Font>
<Image X="11" Y="11" Width="64" Height="64" ImageFile="logo.png" Visible="yes"/> <Window Width="485" Height="300" HexStyle="100a0000" FontId="0" Caption="#(loc.Caption)">
<Text X="80" Y="11" Width="-11" Height="64" FontId="1" Visible="yes" DisablePrefix="yes">#(loc.Title)</Text> <ImageControl X="11" Y="11" Width="64" Height="64" ImageFile="logo.png" Visible="yes"/>
<Label X="80" Y="11" Width="-11" Height="64" FontId="1" Visible="yes" DisablePrefix="yes">#(loc.Title)</Label>
<Page Name="Help"> <Page Name="Help">
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Text> <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Label>
<Text X="11" Y="112" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Text> <Label X="11" Y="112" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Label>
<Button Name="HelpCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.HelpCloseButton)</Button> <Button Name="HelpCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
</Page> <Text>#(loc.HelpCloseButton)</Text>
<Page Name="Install"> <CloseWindowAction />
<Richedit Name="EulaRichedit" X="11" Y="80" Width="-11" Height="-70" TabStop="yes" FontId="0" HexStyle="0x800000" /> </Button>
<Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox> </Page>
<Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.InstallOptionsButton)</Button> <Page Name="Loading">
<Button Name="InstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button> <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes" Visible="no" Name="CheckingForUpdatesLabel" />
<Button Name="WelcomeCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallCloseButton)</Button> </Page>
</Page> <Page Name="Install">
<Page Name="Options"> <Richedit Name="EulaRichedit" X="11" Y="80" Width="-11" Height="-70" TabStop="yes" FontId="0" HexStyle="800000" />
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.OptionsHeader)</Text> <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
<Text X="11" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OptionsLocationLabel)</Text> <Button Name="InstallUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
<Editbox Name="FolderEditbox" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" /> <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">#(loc.OptionsBrowseButton)</Button> <Text>#(loc.InstallOptionsButton)</Text>
<ChangePageAction Page="Options" />
</Button>
<Button Name="InstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button>
<Button Name="InstallCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Text>#(loc.InstallCancelButton)</Text>
<CloseWindowAction />
</Button>
</Page>
<Page Name="Options">
<Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.OptionsHeader)</Label>
<Label X="11" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OptionsLocationLabel)</Label>
<Editbox Name="InstallFolder" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" />
<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">
<Text>#(loc.OptionsBrowseButton)</Text>
<BrowseDirectoryAction VariableName="InstallFolder" />
</Button>
<!-- Added a checkbox for user to choose if shortcut is placed on <!-- Added a checkbox for user to choose if shortcut is placed on
desktop or not. Checkbox's current state (checked/unchecked) is desktop or not. Checkbox's current state (checked/unchecked) is
read from a variable which has same name as this checkbox. The read from a variable which has same name as this checkbox. The
variable is defined in Bundle.wxs. --> variable is defined in Bundle.wxs. -->
<Checkbox Name="AddDesktopShortcutCheckbox" X="11" Y="178" Width="250" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">Add desktop shortcut</Checkbox> <Checkbox Name="AddDesktopShortcutCheckbox" X="11" Y="178" Width="250" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">Add desktop shortcut</Checkbox>
<Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsOkButton)</Button> <Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsCancelButton)</Button> <Text>#(loc.OptionsOkButton)</Text>
</Page> <ChangePageAction Page="Install" />
<Page Name="FilesInUse"> </Button>
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.FilesInUseHeader)</Text> <Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Text X="11" Y="121" Width="-11" Height="34" FontId="3" DisablePrefix="yes">#(loc.FilesInUseLabel)</Text> <Text>#(loc.OptionsCancelButton)</Text>
<Text Name="FilesInUseText" X="11" Y="150" Width="-11" Height="-86" FontId="3" DisablePrefix="yes" HexStyle="0x0000C000"></Text> <ChangePageAction Page="Install" Cancel="yes" />
</Button>
<Button Name="FilesInUseCloseRadioButton" X="11" Y="-60" Width="-11" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes" HexStyle="0x000009">#(loc.FilesInUseCloseRadioButton)</Button> </Page>
<Button Name="FilesInUseDontCloseRadioButton" X="11" Y="-40" Width="-11" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes" HexStyle="0x000009">#(loc.FilesInUseDontCloseRadioButton)</Button> <Page Name="Progress">
<Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Label>
<Button Name="FilesInUseOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FilesInUseOkButton)</Button> <Label X="11" Y="121" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Label>
<Button Name="FilesInUseCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FilesInUseCancelButton)</Button> <Label Name="OverallProgressPackageText" X="85" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OverallProgressPackageText)</Label>
</Page> <Progressbar Name="OverallCalculatedProgressbar" X="11" Y="143" Width="-11" Height="15" />
<Page Name="Progress"> <Button Name="ProgressCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ProgressCancelButton)</Button>
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Text> </Page>
<Text X="11" Y="121" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Text> <Page Name="Modify">
<Text Name="OverallProgressPackageText" X="85" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OverallProgressPackageText)</Text> <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
<Progressbar Name="OverallCalculatedProgressbar" X="11" Y="143" Width="-11" Height="15" /> <Button Name="ModifyUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
<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">
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Text> <Text>#(loc.ModifyCancelButton)</Text>
<Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> <CloseWindowAction />
<Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> </Button>
<Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyCloseButton)</Button> </Page>
</Page> <Page Name="Success">
<Page Name="Success"> <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">
<Text Name="SuccessHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessHeader)</Text> <Text>#(loc.SuccessHeader)</Text>
<Text Name="SuccessInstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessInstallHeader)</Text> <Text Condition="WixBundleAction = 2">#(loc.SuccessLayoutHeader)</Text>
<Text Name="SuccessRepairHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessRepairHeader)</Text> <Text Condition="WixBundleAction = 3">#(loc.SuccessUnsafeUninstallHeader)</Text>
<Text Name="SuccessUninstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessUninstallHeader)</Text> <Text Condition="WixBundleAction = 4">#(loc.SuccessUninstallHeader)</Text>
<Button Name="LaunchButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button> <Text Condition="WixBundleAction = 5">#(loc.SuccessCacheHeader)</Text>
<Text Name="SuccessRestartText" X="-11" Y="-51" Width="400" Height="34" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessRestartText)</Text> <Text Condition="WixBundleAction = 6">#(loc.SuccessInstallHeader)</Text>
<Button Name="SuccessRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button> <Text Condition="WixBundleAction = 7">#(loc.SuccessModifyHeader)</Text>
<Button Name="SuccessCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.SuccessCloseButton)</Button> <Text Condition="WixBundleAction = 8">#(loc.SuccessRepairHeader)</Text>
</Page> </Label>
<Page Name="Failure"> <Button Name="LaunchButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button>
<Text Name="FailureHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureHeader)</Text> <Label X="-11" Y="-51" Width="400" Height="34" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBARestartRequired">
<Text Name="FailureInstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureInstallHeader)</Text> <Text>#(loc.SuccessRestartText)</Text>
<Text Name="FailureUninstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureUninstallHeader)</Text> <Text Condition="WixBundleAction = 3">#(loc.SuccessUninstallRestartText)</Text>
<Text Name="FailureRepairHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRepairHeader)</Text> </Label>
<Hypertext Name="FailureLogFileLink" X="11" Y="121" Width="-11" Height="42" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext> <Button Name="SuccessRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button>
<Hypertext Name="FailureMessageText" X="22" Y="163" Width="-11" Height="51" FontId="3" TabStop="yes" HideWhenDisabled="yes" /> <Button Name="SuccessCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
<Text Name="FailureRestartText" X="-11" Y="-51" Width="400" Height="34" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRestartText)</Text> <Text>#(loc.SuccessCloseButton)</Text>
<Button Name="FailureRestartButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FailureRestartButton)</Button> <CloseWindowAction />
<Button Name="FailureCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FailureCloseButton)</Button> </Button>
</Page> </Page>
<Page Name="Failure">
<Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">
<Text>#(loc.FailureHeader)</Text>
<Text Condition="WixBundleAction = 2">#(loc.FailureLayoutHeader)</Text>
<Text Condition="WixBundleAction = 3">#(loc.FailureUnsafeUninstallHeader)</Text>
<Text Condition="WixBundleAction = 4">#(loc.FailureUninstallHeader)</Text>
<Text Condition="WixBundleAction = 5">#(loc.FailureCacheHeader)</Text>
<Text Condition="WixBundleAction = 6">#(loc.FailureInstallHeader)</Text>
<Text Condition="WixBundleAction = 7">#(loc.FailureModifyHeader)</Text>
<Text Condition="WixBundleAction = 8">#(loc.FailureRepairHeader)</Text>
</Label>
<Hypertext Name="FailureLogFileLink" X="11" Y="121" Width="-11" Height="42" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext>
<Hypertext Name="FailureMessageText" X="22" Y="163" Width="-11" Height="51" FontId="3" TabStop="yes" HideWhenDisabled="yes" />
<Label X="-11" Y="-51" Width="400" Height="34" 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>