tags:

views:

49

answers:

3

I have an application that requires at least Windows XP SP3. How can I go about checking for it either in the application itself, or in the MSI, and automating the installation?

A: 

I am not sure how to do this before installing, but I know that in the application code itself you can do this...

OperatingSystem os = Environment.OSVersion;
Console.WriteLine("Platform:     " + os.Platform);
Console.WriteLine("Version:      " + os.Version);
Console.WriteLine("Service Pack: " + os.ServicePack);
Josh Stodola
A: 
Version winXpSp3 = new Version("5.1.2600.5512"); // to be checked, I don't have XP SP3 available...
if (Environment.OSVersion.Version < winXpSp3)
{
    MessageBox.Show("You need Windows XP SP3 or later");
    ...
}

You can use that code in a custom installer step (apparently not, according to Christopher Painter... I leave the code anyway, it could still help someone in another context)

Thomas Levesque
That is not how Windows Installer works.
Christopher Painter
Well, in Visual Studio you can create an installer with custom steps written in C#... I don't know exactly how that would work, but it's certainly possible to do it that way, and the OP mentioned .NET in the tags, so he's clearly looking for a .NET solution. Anyway, I don't think this answer deserves a downvote...
Thomas Levesque
Just because something can be done doesn't mean that it should. Read: http://robmensching.com/blog/posts/2007/4/19/Managed-Code-CustomActions-no-support-on-the-way-and-heres and http://robmensching.com/blog/posts/2007/8/17/Zataoca-Custom-actions-are-generally-an-admission-of-failure
Christopher Painter
Think of some junior developer coming in and doing some crazy out of process, reinvent the wheel, role your own garbage that could have been 1 line of code in C# and you'll start to understand why I downvoted your answer.
Christopher Painter
I didn't read everything, but since I never tried it myself and I don't have much experience with installers, I'll assume you're right...
Thomas Levesque
+4  A: 

In MSI you author a LaunchCondition using the Operating System Properties

You want to check that VersionNT > 501 or ( VersionNT = 501 and ServicePackLevel > 2 )

(tweak to meet your exact needs )

In Windows Installer XML this looks like:

<Product...>
  <Condition Message="[ProductName] Setup requires Windows XP SP3 or greater to install">VersionNT > 501 or ( VersionNT = 501 and ServicePackLevel > 2 ) or Installed</Condition>
...
</Product>
Christopher Painter