This is my first custom installer and essentially I needed to create one that
installed windows installer 3.1 then installed .Net 2.0 Service Pack 1. I
could not find a pre-packaged .Net 2.o SP 1 installer package anywhere so
this is my attempt.
The problem seems to be that when I first created it if .NET 2.0 was
installed it would not install .NET 2.0 SP1 so I commented out the line where
it checks but that leads the installer to try and reinstall it on reboot.
Can anyone tell me how to differentiate between .NET 2.0 and .NET 2.0 SP 1?
my package.xml file:
<?xml version="1.0" encoding="utf-8" ?>
<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="Custom.Bootstrapper.Package">
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="NetFx20SP1_x86.exe"/>
<PackageFile Name="WindowsInstaller-KB893803-v2-x86.exe"
HomeSite="Msi31Exe"
PublicKey="3082010A0282010100CF38F7E1A4275EF8F0CCA ACEFB3ADE3B6231460546BBF5B6051AD3B3ACC29F0F4C67082 8C44310F53B75797F6A91F4D633C861BFFA9190007AF0791D5 D6870F690B29877B5031D2F9B9D9B75892F4A01417C9E7CCB8 7439BF49674999E98C1CF40575816F6C0D59216E52485718F9 949ED557C65C91F380023C53EAB11D6296CC69EA0705B7DD53 7D4677720C306CE85F84E3480A035C41C53320157EFB128BD6 C01E3AD40BC80A90949DB36E337F41D49AA2AA76BD019D3CC8 E9DD686467A134AD64519A553B3E2782F2E35976B4CC6E81AB 0D3D1249069ABCEFC696E3E4CFB024162DC07985D7E5CA74C2 7316B564CE198D8E0D11D718D3D2AC07F714DFFCF020301000 1"/>
<PackageFile Name="dotnetchk.exe"/>
</PackageFiles>
<InstallChecks>
<ExternalCheck Property="DotNetInstalled" PackageFile="dotnetchk.exe" />
<RegistryCheck Property="IEVersion"
Key="HKLM\Software\Microsoft\Internet Explorer" Value="Version" />
</InstallChecks>
<Commands>
<Command PackageFile="WindowsInstaller-KB893803-v2-x86.exe"
Arguments= '/norestart'>
<InstallConditions>
<BypassIf Property="VersionMsi"
Compare="VersionGreaterThanOrEqualTo" Value="3.1"/>
<FailIf Property="Version9x" Compare="ValueExists"
String="InvalidPlatform"/>
<FailIf Property="VersionNT" Compare="VersionLessThan"
Value="5.0.3" String="InvalidPlatform"/>
<FailIf Property="ProcessorArchitecture"
Compare="ValueNotEqualTo" Value="Intel" String="InvalidPlatformArchitecture"
/>
<FailIf Property="AdminUser" Compare="ValueEqualTo"
Value="false" String="AdminRequired"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail"
FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
<Command PackageFile="NetFx20SP1_x86.exe" Arguments="">
<InstallConditions>
<!-- Either of these properties indicates the .Net Framework is
already installed -->
<!--BypassIf Property="DotNetInstalled" Compare="ValueNotEqualTo"
Value="0"/ -->
<!-- Bypass if MSI is not installed -->
<BypassIf Property="IsMsiInstalled" Compare="ValueGreaterThan"
Value="0"/>
<!-- Block install if user does not have admin privileges -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false"
String="AdminRequired"/>
<!-- Block install on Windows 95 -->
<FailIf Property="Version9X" Compare="VersionLessThan" Value="4.10"
String="InvalidPlatformWin9x"/>
<!-- Block install on Windows 2000 SP 2 or less -->
<FailIf Property="VersionNT" Compare="VersionLessThan" Value="5.0.3"
String="InvalidPlatformWinNT"/>
<!-- Block install if IE 5.01 or greater is not present -->
<FailIf Property="IEVersion" Compare="ValueNotExists"
String="InvalidPlatformIE" />
<FailIf Property="IEVersion" Compare="VersionLessThan" Value="5.01"
String="InvalidPlatformIE" />
<!-- Block install if the platform is not x86 -->
<FailIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo"
Value="Intel" String="InvalidPlatformArchitecture" />
</InstallConditions>
<!--ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" String="GeneralFailure"/>
</ExitCodes-->
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<ExitCode Value="4097" Result="Fail" String="AdminRequired"/>
<ExitCode Value="4098" Result="Fail"
String="WindowsInstallerComponentFailure"/>
<ExitCode Value="4099" Result="Fail"
String="WindowsInstallerImproperInstall"/>
<ExitCode Value="4101" Result="Fail" String="AnotherInstanceRunning"/>
<ExitCode Value="4102" Result="Fail" String="OpenDatabaseFailure"/>
<ExitCode Value="4113" Result="Fail" String="BetaNDPFailure"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true"
String="GeneralFailure" />
</ExitCodes>
</Command>