// // copyright 2003 Don Kackman - mailto:dkackman_2000@yahoo.com // // no warranty expressed or implied // use however you'd like // using System; using System.IO; using System.Collections; namespace VersionVDProj { /// /// Class that updates the version info of MSI projects /// public class MSIProjectVersioner : VDProjectVersioner { private readonly static Guid MSI_PROJECT_TYPE = new Guid( "{2C2AF0D9-9B47-4FE5-BEF2-169778172667}" ); private Guid productCode = Guid.Empty; private Guid packageCode = Guid.Empty; private Guid upgradeCode = Guid.Empty; /// /// createas a new instance of the class /// /// the project file public MSIProjectVersioner( FileInfo file ) : base( file, MSI_PROJECT_TYPE ) { } protected override void SetOptions( Hashtable options ) { // get the package code - generate if not specified if ( options.Contains("packagecode") ) packageCode = new Guid( options["packagecode"].ToString() ); else packageCode = Guid.NewGuid(); // get the product code - set to package code if not specified if ( options.Contains("productcode") ) productCode = new Guid( options["productcode"].ToString() ); else productCode = packageCode; // get the upgrade code - leave empty if not specified if ( options.Contains("upgradecode") ) upgradeCode = new Guid( options["upgradecode"].ToString() ); } protected override string TranslateLine( string line ) { // look for the properties we are interested in changing // if we find them, replace the old value with the new and return the new line string // otherwise just return the line string if ( line.IndexOf( "\"ProductVersion\"" ) != -1 ) line = ReplaceValue( line, "ProductVersion", version.ThreePartVersion ); else if ( productCode != Guid.Empty && line.IndexOf( "\"ProductCode\"" ) != -1 ) line = ReplaceValue( line, "ProductCode", "{" + productCode.ToString().ToUpper() + "}" ); else if ( packageCode != Guid.Empty && line.IndexOf( "\"PackageCode\"" ) != -1 ) line = ReplaceValue( line, "PackageCode", "{" + packageCode.ToString().ToUpper() + "}" ); else if ( upgradeCode != Guid.Empty && line.IndexOf( "\"UpgradeCode\"" ) != -1 ) line = ReplaceValue( line, "UpgradeCode", "{" + upgradeCode.ToString().ToUpper() + "}" ); return line; } } }