Hey Sam,

I found a couple things that should be changed in your build file.

You should specify GUIDs to define the ProductCode and UpgradeCode
properties.  The ProductCode is used to distinguish different versions and
languages of products.  The UpgradeCode is a GUID representing a related set
of products.  So, say that you have Kensington v1.0.0 with Product Code
{3057D982-F7E4-4243-803E-04E943285B62} and Upgrade Code
{15F29190-CA8A-4398-94B9-477C46212E94}, Kensington v1.1.0 might have Product
Code {FCF4EE6B-F849-4b47-9FA3-E4739C8CA95C} and UpgradeCode
{15F29190-CA8A-4398-94B9-477C46212E94}.  When setup is run, it uses the
ProductVersion property to then determine if an upgrade is required or not.

With that said, you should change the value of the kensington.version
property to follow the format major.minor.build per Microsoft's
specification of the ProductVersion property.

It seems that the root attribute specified for the directory is bad.  You
should change it to a supported directory.  This is a list of supported root
directories with the default msi template provided with NAntContrib:

TARGETDIR
ProgramFilesFolder
AppDataFolder
DesktopFolder
ProgramMenuFolder
StartMenuFolder
StartupFolder
AdminToolsFolder
CommonAppDataFolder
CommonFiles64Folder
CommonFilesFolder
FavoritesFolder
FontsFolder
LocalAppDataFolder
MyPicturesFolder
PersonalFolder
ProgramFiles64Folder
SendToFolder
System16Folder
System64Folder
SystemFolder
TempFolder
TemplateFolder
WindowsFolder
WindowsVolume

Also, one thing to keep in mind with regard to directories is that the
MSI/MSM tasks expect that the directories exist relative to where the build
file is.  So, for your example, if your build file exists in
C:\MyProjects\Kensington\TestSolution, then there should be a subdirectory
Kensington from the TestSolution folder.  The other result of this is that
when you specify a basedir from the fileset, the task ignores that and
expects the files to exist in a directory structure relative to where the
build file is being executed.  So, it is looking for Kensington.dll in
C:\MyProjects\Kensington\TestSolution\Kensington rather than
C:\MyProjects\Kensington\TestSolution\Kensington\bin\Release

The key file assigned to a component should be a file within that
component's fileset.  So for the component "KensingtonFiles" the keyfile
should be "Kensignton.dll"

I have included the changes that I made.  If you have further questions,
please don't hesitate to ask.

Jim

P.s. The bug with the fileset is on my TODO list, so once Kraen submits his
changes, I'll have a look at that.


________________________________________
From: Sam Akiwumi [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, January 21, 2004 9:29 AM
To: James Geurts; Sam Akiwumi; [EMAIL PROTECTED]
Subject: RE: [NAntC-Dev] MSITask usage and documentation

Thanks James
 
I've managed to cobble together a build file using the nantcontrib as the
example. However I think I might have missed something, because I get the
error below when I run the build (file attached). Any pointers in the right
direction are appreciated. 
 
Buildfile: file:///C:/MyProjects/Kensington/Kensington.build
 
msi:
 
      [msi] Building MSI Database "Kensington.msi".
      [msi] Storing Banner:
        C:\MyProjects\Kensington\TestSolution\Kensington\Bliss.bmp
      [msi] Storing Background:
        C:\MyProjects\Kensington\TestSolution\Kensington\Bliss.bmp
      [msi] Storing License:
        C:\MyProjects\Kensington\TestSolution\Kensington\license.rtf
      [msi] Adding Properties:
        ProductName
        ProductVersion
        Manufacturer
        ProductCode
        UpgradeCode
      [msi] Adding Directories:
        C:\MyProjects\Kensington\TestSolution\Kensington
      [msi] Add Files:
Total time: 1 seconds.
 
BUILD FAILED
 
      [msi] ERROR: System.NullReferenceException thrown:
Object reference not set to an instance of an object.
   at NAnt.Core.DataTypeBase.InitializeElement(XmlNode elementNode)
   at NAnt.Core.Types.FileSet.InitializeElement(XmlNode elementNode)
   at NAnt.Core.Element.Initialize(XmlNode elementNode)
   at NAnt.Contrib.Tasks.MSITask.AddFiles(Database Database, View
DirectoryView, MSIComponent Compon
ent, View FileView, Type InstallerType, Object InstallerObject, String
ComponentDirectory, String Co
mponentName, Int32& ComponentCount, Int32& Sequence, View MsiAssemblyView,
View MsiAssemblyNameView,
 View ComponentView, View FeatureComponentView, View ClassView, View
ProgIdView, View SelfRegView)
   at NAnt.Contrib.Tasks.MSITask.LoadComponents(Database Database, Type
InstallerType, Object Instal
lerObject, Int32& LastSequence, View MsiAssemblyView, View
MsiAssemblyNameView, View DirectoryView,
View ClassView, View ProgIdView)
   at NAnt.Contrib.Tasks.MSITask.ExecuteTask()

Attachment: Kensington_update.build
Description: Binary data

Reply via email to