/*********************************************************************** * * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; version 2.1 * of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, Novell, Inc. * * To contact Novell about this file by physical or electronic mail, * you may find current contact information at www.novell.com. * ***********************************************************************/ // // 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; } } }