Overview[]
Create an .msi file which will install a program called Example in C:\Program Files\Example\example.exe
Set up[]
Lesson 1[]
Create a new directory and place a program there called example.exe.
If you want, you can copy notepad, like so:
- c:\windows\system32\notepad.exe example.exe
Next, create file example.wxs and make_installer.bat. See below
Make sure you have wix 3 installed in: c:\program files\Windows Installer XML v3
Add to the PATH: c:\program files\Windows Installer XML v3\bin
Run candle.exe or light.exe from the command prompt to make sure they are found in the PATH
Run make_installer.bat
Run example.msi to install.
Check C:\Program Files\Example
Uninstall "Example" when done
Lesson 2[]
Now create one with Start menu shortcut: Use example.wxs for lesson 2 below.
Lesson 3[]
Now do an upgrade.
<?define> is used so data isn't duplicated.
Use example.wxs for lesson 3 below.
Every time you want to release a new version of the product, increase the ProductVersion.
But keep the UpgradeCode the same.
The example file has ProductVersion as 0.0.1
Lease it that way and build an MSI file, then rename it to example.1.msi
Now change the ProductVersion to 0.0.2 and rebuild. Rename the msi to example.2.msi
If you install version 2 after version 1, it will upgrade. If you attempt to install version 1 on top of version 2, it will give an error message.
Lesson 4[]
Add an icon and support information that shows up in add / remove programs.
Copy example.ico into the folder (get an .ico file from somewhere)
Use example.wxs for lesson 4 below. Note the link in the ad / remove programs, and icon in the add / remove programs.
Bootstrapper[]
If you have .net, use this bootstrapper http://dotnetinstaller.codeplex.com/
File: make_installer.bat[]
candle example.wxs light example.wixobj
File: example.wxs[]
<?xml version="1.0"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" Name="Example Product Name" Version="0.0.1" Manufacturer="Example Company Name" Language="1033"> <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="Example"> <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222"> <File Id="ApplicationFile1" Source="example.exe"/> </Component> </Directory> </Directory> </Directory> <Feature Id="DefaultFeature" Level="1"> <ComponentRef Id="ApplicationFiles"/> </Feature> </Product> </Wix>
File: example.wxs for lesson 2[]
<?xml version="1.0"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" Name="Example Product Name" Version="0.0.1" Manufacturer="Example Company Name" Language="1033"> <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="Example"> <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222"> <File Id="ApplicationFile1" Source="example.exe"/> </Component> </Directory> </Directory> <Directory Id="ProgramMenuFolder"> <Directory Id="ProgramMenuSubfolder" Name="Example"> <Component Id="ApplicationShortcuts" Guid="12345678-1234-1234-1234-333333333333"> <Shortcut Id="ApplicationShortcut1" Name="Example Shortcut Name" Description="Example Product Name" Target="[INSTALLDIR]example.exe" WorkingDirectory="INSTALLDIR"/> <RegistryValue Root="HKCU" Key="Software\Example Company Name\Example Product Name" Name="installed" Type="integer" Value="1" KeyPath="yes"/> <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/> </Component> </Directory> </Directory> </Directory> <Feature Id="DefaultFeature" Level="1"> <ComponentRef Id="ApplicationFiles"/> <ComponentRef Id="ApplicationShortcuts"/> </Feature> </Product> </Wix>
File: example.wxs for lesson 3[]
<?xml version="1.0"?> <?define ProductVersion = "0.0.1"?> <?define ProductUpgradeCode = "12345678-1234-1234-1234-111111111111"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)" Name="Example Product Name" Version="$(var.ProductVersion)" Manufacturer="Example Company Name" Language="1033"> <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Upgrade Id="$(var.ProductUpgradeCode)"> <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/> <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/> </Upgrade> <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="Example"> <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222"> <File Id="ApplicationFile1" Source="example.exe"/> </Component> </Directory> </Directory> <Directory Id="ProgramMenuFolder"> <Directory Id="ProgramMenuSubfolder" Name="Example"> <Component Id="ApplicationShortcuts" Guid="12345678-1234-1234-1234-333333333333"> <Shortcut Id="ApplicationShortcut1" Name="Example Shortcut Name" Description="Example Product Name" Target="[INSTALLDIR]example.exe" WorkingDirectory="INSTALLDIR"/> <RegistryValue Root="HKCU" Key="Software\Example Company Name\Example Product Name" Name="installed" Type="integer" Value="1" KeyPath="yes"/> <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/> </Component> </Directory> </Directory> </Directory> <InstallExecuteSequence> <RemoveExistingProducts After="InstallValidate"/> </InstallExecuteSequence> <Feature Id="DefaultFeature" Level="1"> <ComponentRef Id="ApplicationFiles"/> <ComponentRef Id="ApplicationShortcuts"/> </Feature> </Product> </Wix>
File: example.wxs for lesson 4[]
<?xml version="1.0"?> <?define ProductVersion = "0.0.2"?> <?define ProductUpgradeCode = "12345678-1234-1234-1234-111111111111"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)" Name="Example Product Name" Version="$(var.ProductVersion)" Manufacturer="Example Company Name" Language="1033"> <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Icon Id="ProductIcon" SourceFile="example.ico"/> <Property Id="ARPPRODUCTICON" Value="ProductIcon"/> <Property Id="ARPHELPLINK" Value="http://www.exampleproduct.com"/> <Property Id="ARPURLINFOABOUT" Value="http://www.examplecompany.com"/> <Property Id="ARPNOREPAIR" Value="1"/> <Property Id="ARPNOMODIFY" Value="1"/> <Upgrade Id="$(var.ProductUpgradeCode)"> <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/> <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/> </Upgrade> <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="Example"> <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222"> <File Id="ApplicationFile1" Source="example.exe"/> </Component> </Directory> </Directory> <Directory Id="ProgramMenuFolder"> <Directory Id="ProgramMenuSubfolder" Name="Example"> <Component Id="ApplicationShortcuts" Guid="12345678-1234-1234-1234-333333333333"> <Shortcut Id="ApplicationShortcut1" Name="Example Shortcut Name" Description="Example Product Name" Target="[INSTALLDIR]example.exe" WorkingDirectory="INSTALLDIR"/> <RegistryValue Root="HKCU" Key="Software\Example Company Name\Example Product Name" Name="installed" Type="integer" Value="1" KeyPath="yes"/> <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/> </Component> </Directory> </Directory> </Directory> <InstallExecuteSequence> <RemoveExistingProducts After="InstallValidate"/> </InstallExecuteSequence> <Feature Id="DefaultFeature" Level="1"> <ComponentRef Id="ApplicationFiles"/> <ComponentRef Id="ApplicationShortcuts"/> </Feature> </Product> </Wix>