views:

273

answers:

2

When using the generic bootstrapper with MSBuild how is the order of installation of prerequisite items determined?

For example, given:

<Project ToolsVersion="3.5" xmlns='http://schemas.microsoft.com/developer/msbuild/2003'&gt;
  <ItemGroup>
    <BootstrapperFile Include='A' />
    <BootstrapperFile Include='B' />
    <BootstrapperFile Include='C' />
    <BootstrapperFile Include='D' />
  </ItemGroup>

  <Target Name='MySetup'>
    <GenerateBootstrapper
      Path='C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper'
      ApplicationName='My Program'
      ApplicationFile='MyProgram.msi'
      BootstrapperItems='@(BootstrapperFile)'
      Culture='en'
      CopyComponents='true'
      ComponentsLocation='HomeSite'
      OutputPath='.\' />
  </Target>
</Project>

What is the order that A, B, C, and D get installed? How do I control that order?

+2  A: 

It looks like I can specify in the product manifest with the DependsOnProduct tag:

<Product ProductCode="A">
  <PackageFiles>...</PackageFiles>
  <RelatedProducts>
    <DependsOnProduct Code="B" />
  </RelatedProducts>
  ...
</Product>

This should result in B being installed before A.

http://msdn.microsoft.com/en-us/library/ms229456.aspx

fryguybob
Your last statement is backwards. Product A depends on B and so B is installed first. You get a +1 if you fix it.
Peter LaComb Jr.
Thanks, fixed it.
fryguybob
A: 

You seem to have already answered your own question. As you allude to in your answer, the order of the products in determined by the pacakges themselves. Your msi is always installed last.

The packages can be found in (for VS2008):
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages

Eeach package contains it's own bootstrapper manifest file where the prerequisites are set. You shouldn't have to worry about this for the provided packages from microsoft. You really should only care if you're creating your own packages for your pre-requisites.

Peter Tate