| 1 |
<?xml version="1.0"?> |
| 2 |
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" |
| 3 |
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> |
| 4 |
|
| 5 |
<!-- Some useful local variables --> |
| 6 |
<?define ProductVersion=$(env.OPENMSX_VERSION) ?> |
| 7 |
<?define LastNonMSIProductVersion=0.6.0.0 ?> |
| 8 |
<?define MinInstallerVersion=200 ?> |
| 9 |
<?if $(sys.BUILDARCH)=x86 ?> |
| 10 |
<?define ProductName=!(loc.openMSX) ?> |
| 11 |
<?define ProgramFilesFolderNative=ProgramFilesFolder ?> |
| 12 |
<?define UpgradeCode=9e38eab5-7a1c-4b43-ae24-c2152a4018f1 ?> |
| 13 |
<?else?> |
| 14 |
<?define ProductName=!(loc.openMSX) (64-bit) ?> |
| 15 |
<?define ProgramFilesFolderNative=ProgramFiles64Folder ?> |
| 16 |
<?define UpgradeCode=c7bd4b4d-1307-4a0d-b3f8-69744c7e5801 ?> |
| 17 |
<?endif?> |
| 18 |
|
| 19 |
<!-- To keep things simple, our installer considers each new release |
| 20 |
a major upgrade, so we change the Product Id on every build --> |
| 21 |
<Product Id="*" |
| 22 |
UpgradeCode="$(var.UpgradeCode)" |
| 23 |
Name="$(var.ProductName)" |
| 24 |
Language="!(loc.LANG)" |
| 25 |
Version="$(var.ProductVersion)" |
| 26 |
Manufacturer="!(loc.openMSX)"> |
| 27 |
|
| 28 |
<!-- Package Ids change on every build by definition --> |
| 29 |
<Package Id="*" |
| 30 |
Platform="$(sys.BUILDARCH)" |
| 31 |
Description="$(var.ProductName)" |
| 32 |
InstallerVersion="$(var.MinInstallerVersion)" |
| 33 |
Compressed="yes" /> |
| 34 |
|
| 35 |
<!-- Icon used in the control panel --> |
| 36 |
<Icon Id="openMSXIcon" SourceFile="$(env.OPENMSX_ICON_PATH)"/> |
| 37 |
|
| 38 |
<!-- Populate useful control panel fields --> |
| 39 |
<?include ControlPanel.wxi ?> |
| 40 |
|
| 41 |
<!-- |
| 42 |
Upgrade handling |
| 43 |
--> |
| 44 |
|
| 45 |
<Upgrade Id="$(var.UpgradeCode)"> |
| 46 |
<UpgradeVersion Minimum="$(var.ProductVersion)" |
| 47 |
IncludeMinimum="no" |
| 48 |
OnlyDetect="yes" |
| 49 |
Language="!(loc.LANG)" |
| 50 |
Property="NEWPRODUCTFOUND" /> |
| 51 |
<UpgradeVersion Minimum="$(var.LastNonMSIProductVersion)" |
| 52 |
Maximum="$(var.ProductVersion)" |
| 53 |
Property="PREVIOUSVERSIONSINSTALLED" |
| 54 |
IncludeMinimum="no" |
| 55 |
IncludeMaximum="yes" /> |
| 56 |
</Upgrade> |
| 57 |
|
| 58 |
<InstallExecuteSequence> |
| 59 |
<!-- Prevent downgrades --> |
| 60 |
<Custom Action="PreventDowngrades" |
| 61 |
After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> |
| 62 |
<!-- Remove the previous product /before/ installing the new one --> |
| 63 |
<RemoveExistingProducts After="InstallValidate">PREVIOUSVERSIONSINSTALLED</RemoveExistingProducts> |
| 64 |
</InstallExecuteSequence> |
| 65 |
|
| 66 |
<CustomAction Id="PreventDowngrades" |
| 67 |
Error="!(loc.NewerVersionError)" /> |
| 68 |
|
| 69 |
<!-- We only support Windows 2000 and above --> |
| 70 |
<Condition Message="!(loc.OldWindowsError)"> |
| 71 |
<![CDATA[VersionNT >= 500]]> |
| 72 |
</Condition> |
| 73 |
|
| 74 |
<!-- Compress installation files in an embedded cab file --> |
| 75 |
<Media Id="1" Cabinet="openmsx.cab" EmbedCab="yes" CompressionLevel="high" /> |
| 76 |
|
| 77 |
<!-- The default installation directory is under [ProgramFilesFolder] or [ProgramFiles64Folder] --> |
| 78 |
<Directory Id="TARGETDIR" Name="SourceDir"> |
| 79 |
<Directory Id="$(var.ProgramFilesFolderNative)"> |
| 80 |
<Directory Id="OPENMSXINSTALLDIR" Name="openMSX"> |
| 81 |
<!-- This dummy component has one purpose: to remove the annoying 'run from the network' option on the root feature |
| 82 |
Apparently features without components have that option enabled. Shrug. --> |
| 83 |
<Component Id="DummyComponent" Guid="1ce98c66-b014-4d3f-b926-b08f65a7f3f3"> |
| 84 |
<CreateFolder /> |
| 85 |
</Component> |
| 86 |
</Directory> |
| 87 |
</Directory> |
| 88 |
<Directory Id="ProgramMenuFolder"> |
| 89 |
<Directory Id="openMSXStartMenuDir" Name="openMSX"/> |
| 90 |
</Directory> |
| 91 |
<Directory Id="SystemFolder" /> |
| 92 |
</Directory> |
| 93 |
|
| 94 |
<!-- |
| 95 |
User interface |
| 96 |
--> |
| 97 |
|
| 98 |
<!-- Use the WixUI_FeatureTree UI in order to customize features and installation directory --> |
| 99 |
<Property Id="WIXUI_INSTALLDIR" Value="OPENMSXINSTALLDIR" /> |
| 100 |
<UIRef Id="WixUI_FeatureTree" /> |
| 101 |
<!-- Remove the license agreement dialog, which sits between WelcomeDlg and CustomizeDlg --> |
| 102 |
<UI> |
| 103 |
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">1</Publish> |
| 104 |
<Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">NOT Installed</Publish> |
| 105 |
</UI> |
| 106 |
<!-- We have no license agreement at the moment. This is how we'd reference one --> |
| 107 |
<!-->WixVariable Id="WixUILicenseRtf" Value="license1033.rtf" /--> |
| 108 |
<!-- Installer Graphics --> |
| 109 |
<WixVariable Id="WixUIDialogBmp" Value="$(env.OPENMSX_PACKAGE_WINDOWS_PATH)/images/SideBanner.jpg" /> |
| 110 |
<WixVariable Id="WixUIBannerBmp" Value="$(env.OPENMSX_PACKAGE_WINDOWS_PATH)/images/TopBanner.jpg" /> |
| 111 |
|
| 112 |
<!-- Add text to the final dialog; the custom action is needed to use the OPENMSXINSTALLDIR property --> |
| 113 |
<CustomAction Id="CA_Set_WIXUI_EXITDIALOGOPTIONALTEXT" Property="WIXUI_EXITDIALOGOPTIONALTEXT" |
| 114 |
Value="To emulate real MSX systems (besides the free C-BIOS machines), put the system ROMs here: [PersonalFolder]openMSX\share\systemroms Copy MSX software referred to from replays or savestates you get from your friends to [PersonalFolder]openMSX\share\software. (For all users, use [OPENMSXINSTALLDIR]share as admin instead.)" /> |
| 115 |
<InstallUISequence> |
| 116 |
<Custom Action="CA_Set_WIXUI_EXITDIALOGOPTIONALTEXT" After="ExecuteAction" /> |
| 117 |
</InstallUISequence> |
| 118 |
|
| 119 |
<!-- |
| 120 |
Start Menu shortcuts |
| 121 |
--> |
| 122 |
|
| 123 |
<DirectoryRef Id="openMSXStartMenuDir"> |
| 124 |
<Component Id="openMSXShortcuts" Guid="*"> |
| 125 |
|
| 126 |
<!-- Shortcut to openmsx.exe --> |
| 127 |
<Shortcut Id="openMSXExeShortcut" |
| 128 |
Name="!(loc.openMSX)" |
| 129 |
Description="!(loc.TagLine)" |
| 130 |
Target="[OPENMSXINSTALLDIR]openmsx.exe" |
| 131 |
WorkingDirectory="OPENMSXINSTALLDIR" /> |
| 132 |
|
| 133 |
<!-- Shortcut to openMSX manual --> |
| 134 |
<Shortcut Id="openMSXManualShortcut" |
| 135 |
Name="!(loc.openMSXManual)" |
| 136 |
Description="!(loc.openMSXManual)" |
| 137 |
Target="[OPENMSXINSTALLDIR]doc\manual\index.html" |
| 138 |
WorkingDirectory="OPENMSXINSTALLDIR" /> |
| 139 |
|
| 140 |
<!-- Shortcut to openMSX website --> |
| 141 |
<util:InternetShortcut Id="openMSXWebSiteShortcut" |
| 142 |
Name="!(loc.openMSXWebSite)" |
| 143 |
Target="http://openmsx.org/" /> |
| 144 |
|
| 145 |
<!-- Shortcut to uninstall - do we really need this? |
| 146 |
Note that [SystemFolder64] is always the native system folder --> |
| 147 |
<Shortcut Id="UninstallProduct" |
| 148 |
Name="!(loc.UninstallopenMSX)" |
| 149 |
Description="!(loc.UninstallopenMSX)" |
| 150 |
Target="[System64Folder]msiexec.exe" |
| 151 |
Arguments="/x [ProductCode]" /> |
| 152 |
|
| 153 |
<!-- This is needed to fix two errors: |
| 154 |
ICE38: Component openMSXShortcuts installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file. |
| 155 |
ICE43: Component openMSXShortcuts has non-advertised shortcuts. It should use a registry key under HKCU as its KeyPath, not a file. --> |
| 156 |
<RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="Installed" Type="integer" Value="1" KeyPath="yes"/> |
| 157 |
|
| 158 |
<!-- This is needed to prevent the following error: |
| 159 |
ICE64: The directory openMSXStartMenuDir is in the user profile but is not listed in the RemoveFile table. --> |
| 160 |
<RemoveFolder Id="openMSXStartMenuDir" On="uninstall" /> |
| 161 |
</Component> |
| 162 |
|
| 163 |
<!-- Use a hardcoded guid here to work around what appears to be a WiX bug |
| 164 |
Otherwise, we get ICE08: Component: CatapultShortcuts has a duplicate GUID: {69F885AD-19F6-5D4D-89DC-E05C05A3D761} --> |
| 165 |
<Component Id="CatapultShortcuts" Guid="5ad9c567-56a1-4d61-9edc-5504f2ae673e"> |
| 166 |
|
| 167 |
<!-- Shortcut to catapult.exe --> |
| 168 |
<Shortcut Id="CatapultExeShortcut" |
| 169 |
Name="!(loc.Catapult)" |
| 170 |
Description="!(loc.CatapultDescription)" |
| 171 |
Target="[OPENMSXINSTALLDIR]Catapult\bin\catapult.exe" |
| 172 |
WorkingDirectory="OPENMSXINSTALLDIR" /> |
| 173 |
|
| 174 |
<!-- Shortcut to Catapult manual --> |
| 175 |
<Shortcut Id="CatapultManualShortcut" |
| 176 |
Name="!(loc.CatapultManual)" |
| 177 |
Description="!(loc.CatapultManual)" |
| 178 |
Target="[OPENMSXINSTALLDIR]Catapult\doc\manual\index.html" |
| 179 |
WorkingDirectory="OPENMSXINSTALLDIR" /> |
| 180 |
|
| 181 |
<RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="Installed" Type="integer" Value="1" KeyPath="yes"/> |
| 182 |
</Component> |
| 183 |
|
| 184 |
</DirectoryRef> |
| 185 |
|
| 186 |
<!-- |
| 187 |
Registry entries |
| 188 |
--> |
| 189 |
|
| 190 |
<!-- Use a hardcoded guid to work around CNDL0230 --> |
| 191 |
<Component Id="ZMBVRegistryValues" Guid="52db293d-8b1e-4598-9c9a-c71ed3a5ecb9" KeyPath="yes" Win64="no" Directory="SystemFolder"> |
| 192 |
<RegistryValue Id="Drivers32" |
| 193 |
Name="VIDC.ZMBV" |
| 194 |
Value="zmbv.dll" |
| 195 |
Type="string" |
| 196 |
Root="HKLM" |
| 197 |
Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" |
| 198 |
Action="write" /> |
| 199 |
|
| 200 |
<RegistryValue Id="drivers.desc" |
| 201 |
Name="zmbv.dll" |
| 202 |
Value="!(loc.ZMBVVideoCodecDesc)" |
| 203 |
Type="string" |
| 204 |
Root="HKLM" |
| 205 |
Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc" |
| 206 |
Action="write" /> |
| 207 |
</Component> |
| 208 |
|
| 209 |
<!-- |
| 210 |
Features |
| 211 |
--> |
| 212 |
|
| 213 |
<!-- openMSX is composed of three features: |
| 214 |
1) The required Core Emulator |
| 215 |
2) The optional Catapult UI |
| 216 |
3) The optional ZMBV codec |
| 217 |
Each feature consists of several components: largely files and shortcuts |
| 218 |
The individual file list for feature is dynamically generated |
| 219 |
via file harvesting scripts, whose output is references as |
| 220 |
component groups. --> |
| 221 |
<Feature Id="openMSX" |
| 222 |
Title="!(loc.openMSX)" |
| 223 |
Description="!(loc.TagLine)" |
| 224 |
Level="1" |
| 225 |
Absent="disallow" |
| 226 |
Display="expand" |
| 227 |
AllowAdvertise="no" |
| 228 |
ConfigurableDirectory="OPENMSXINSTALLDIR"> |
| 229 |
|
| 230 |
<ComponentRef Id="DummyComponent" /> |
| 231 |
|
| 232 |
<Feature Id="openMSXCore" |
| 233 |
Title="!(loc.CoreEmulator)" |
| 234 |
Description="Command line MSX emulator" |
| 235 |
Level="1" |
| 236 |
Absent="disallow" |
| 237 |
AllowAdvertise="no"> |
| 238 |
|
| 239 |
<ComponentGroupRef Id="openMSXExe" /> |
| 240 |
<ComponentGroupRef Id="openMSXDoc" /> |
| 241 |
<ComponentGroupRef Id="openMSXShare" /> |
| 242 |
<ComponentGroupRef Id="openMSXIcon" /> |
| 243 |
<ComponentRef Id="openMSXShortcuts" /> |
| 244 |
</Feature> |
| 245 |
|
| 246 |
<Feature Id="Catapult" |
| 247 |
Title="!(loc.CatapultUI)" |
| 248 |
Description="!(loc.CatapultDescription)" |
| 249 |
Level="1" |
| 250 |
Absent="allow" |
| 251 |
AllowAdvertise="no"> |
| 252 |
<ComponentGroupRef Id="CatapultBin" /> |
| 253 |
<ComponentGroupRef Id="CatapultDoc" /> |
| 254 |
<ComponentGroupRef Id="CatapultBitmaps" /> |
| 255 |
<ComponentGroupRef Id="CatapultDialogs" /> |
| 256 |
<ComponentGroupRef Id="CatapultIcons" /> |
| 257 |
<ComponentGroupRef Id="CatapultReadme" /> |
| 258 |
<ComponentRef Id="CatapultShortcuts" /> |
| 259 |
</Feature> |
| 260 |
|
| 261 |
<Feature Id="ZMBVCodec" |
| 262 |
Title="!(loc.ZMBVVideoCodec)" |
| 263 |
Description="!(loc.ZMBVVideoCodecDescription)" |
| 264 |
Level="2" |
| 265 |
Absent="allow" |
| 266 |
AllowAdvertise="no"> |
| 267 |
<ComponentGroupRef Id="ZMBVCodec" /> |
| 268 |
<ComponentGroupRef Id="ZMBVFiles" /> |
| 269 |
<ComponentRef Id="ZMBVRegistryValues" /> |
| 270 |
</Feature> |
| 271 |
|
| 272 |
</Feature> |
| 273 |
|
| 274 |
</Product> |
| 275 |
</Wix> |