From: Rob M. <ro...@us...> - 2004-08-07 21:15:40
|
Update of /cvsroot/wix/wix/src/wix In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24346/src/wix Modified Files: Common.cs Compiler.cs Decompiler.cs Field.cs Librarian.cs WixException.cs Removed Files: WixInsufficientVersionException.cs Log Message: all - more error message cleanup sca - major perf improvements when writing to metabase sca - progress text while writing to metabase sfbug:964214 - don't modularize operators in conditions sfbug:969332 - dark handles service dependencies correctly sfbug:973735 - Empty Package/@Comment attribute fails sfbug:976021 - updated tables.xml sfbug:973838 - updated to support Environment/@Separator sfbug:987217 - fix Merge documentation sfbug:978316 - fix Modularization sfbug:1001866 - fix tallow SelfReg processing --- WixInsufficientVersionException.cs DELETED --- Index: Field.cs =================================================================== RCS file: /cvsroot/wix/wix/src/wix/Field.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Field.cs 28 Jul 2004 15:50:22 -0000 1.4 --- Field.cs 7 Aug 2004 21:14:59 -0000 1.5 *************** *** 154,164 **** sb.Append("["); ! if (!Common.IsStandardProperty(propertyName) && (null == ignoreModularizations || !ignoreModularizations.ShouldIgnoreModularization(propertyName))) { ! sb.AppendFormat("{0}.{1}", propertyName, moduleGuid); } else { ! sb.Append(propertyName); } sb.Append("]"); --- 154,175 ---- sb.Append("["); ! // If the string is "[]", "[\\x]", "[%x]" or "[~]", we don't want to modularize. ! if (0 == propertyName.Length || ! propertyName.StartsWith("\\") || ! propertyName.StartsWith("%") || ! propertyName.StartsWith("~")) { ! sb.Append(propertyName); } else { ! if (!Common.IsStandardProperty(propertyName) && (null == ignoreModularizations || !ignoreModularizations.ShouldIgnoreModularization(propertyName))) ! { ! sb.AppendFormat("{0}.{1}", propertyName, moduleGuid); ! } ! else ! { ! sb.Append(propertyName); ! } } sb.Append("]"); *************** *** 179,183 **** case ColumnModularizeType.Condition: ! Regex regexIdentifiers = new Regex("([!$%?&(]?)([a-zA-Z_][a-zA-Z0-9_.]+)"); // matches a key in the Component or Feature tables and things that look like identfiers Regex regexStrings = new Regex("(\".+\")"); // matches a key in the Component or Feature tables and things that look like identfiers MatchCollection identifiersMatches = regexIdentifiers.Matches(fieldData); --- 190,194 ---- case ColumnModularizeType.Condition: ! Regex regexIdentifiers = new Regex("([!$%?&(]?)([a-zA-Z_][a-zA-Z0-9_.]*)"); // matches a key in the Component or Feature tables and things that look like identfiers Regex regexStrings = new Regex("(\".+\")"); // matches a key in the Component or Feature tables and things that look like identfiers MatchCollection identifiersMatches = regexIdentifiers.Matches(fieldData); *************** *** 202,252 **** stringEnd = (int)stringIndicies[countNext++]; } ! if (0 < stringIndicies.Count) { ! foreach (Match identifierMatch in identifiersMatches) { ! bool modularizeString = true; ! // if we've got a match beyond our current stringEnd, find the nextString ! while (identifierMatch.Index > stringEnd) ! { ! if (countNext < stringIndicies.Count) ! { ! stringStart = (int)stringIndicies[countNext++]; ! stringEnd = (int)stringIndicies[countNext++]; ! } ! else ! { ! stringStart = fieldData.Length; ! stringEnd = fieldData.Length; ! } ! } ! string identifier = fieldData.Substring(end, identifierMatch.Index + identifierMatch.Length - end); ! // identifier inside a string ! if (identifierMatch.Index > stringStart && (identifierMatch.Index + identifierMatch.Length) < stringEnd) ! { ! modularizeString = false; ! } ! // Logical operators look like identifiers so they need to specifically be factored out ! if (identifier.ToUpper() == "NOT" || identifier.ToUpper() == "EQV" || ! identifier.ToUpper() == "XOR" || identifier.ToUpper() == "OR" || ! identifier.ToUpper() == "AND" || identifier.ToUpper() == "IMP") ! { ! modularizeString = false; ! } ! // Defined by schema or authoring to ignore modularization ! if (null != ignoreModularizations && ignoreModularizations.ShouldIgnoreModularization(identifier)) ! { ! modularizeString = false; ! } ! if (modularizeString) { ! sb.AppendFormat("{0}.{1}", identifier, moduleGuid); } ! else // ignore modularization { ! sb.Append(identifier); } - end = identifierMatch.Index + identifierMatch.Length; } } --- 213,262 ---- stringEnd = (int)stringIndicies[countNext++]; } ! foreach (Match identifierMatch in identifiersMatches) { ! bool modularizeString = true; ! // if we've got a match beyond our current stringEnd, find the nextString ! while (identifierMatch.Index > stringEnd) { ! if (countNext < stringIndicies.Count) { ! stringStart = (int)stringIndicies[countNext++]; ! stringEnd = (int)stringIndicies[countNext++]; } ! else { ! stringStart = fieldData.Length; ! stringEnd = fieldData.Length; } } + sb.Append(fieldData.Substring(end, identifierMatch.Index - end)); + string identifier = fieldData.Substring(identifierMatch.Index, identifierMatch.Length); + // identifier inside a string + if (identifierMatch.Index > stringStart && (identifierMatch.Index + identifierMatch.Length) < stringEnd) + { + modularizeString = false; + } + // Logical operators look like identifiers so they need to specifically be factored out + if (identifier.ToUpper() == "NOT" || identifier.ToUpper() == "EQV" || + identifier.ToUpper() == "XOR" || identifier.ToUpper() == "OR" || + identifier.ToUpper() == "AND" || identifier.ToUpper() == "IMP" || + identifier.StartsWith("%")) // If the "identifier" starts with '%', it's an environmental variable, and shouldn't be modularized. + { + modularizeString = false; + } + // Defined by schema or authoring to ignore modularization + if (Common.IsStandardProperty(identifier) || (null != ignoreModularizations && ignoreModularizations.ShouldIgnoreModularization(identifier))) + { + modularizeString = false; + } + if (modularizeString) + { + sb.AppendFormat("{0}.{1}", identifier, moduleGuid); + } + else // ignore modularization + { + sb.Append(identifier); + } + end = identifierMatch.Index + identifierMatch.Length; } Index: Decompiler.cs =================================================================== RCS file: /cvsroot/wix/wix/src/wix/Decompiler.cs,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Decompiler.cs 28 Jul 2004 15:50:22 -0000 1.7 --- Decompiler.cs 7 Aug 2004 21:14:59 -0000 1.8 *************** *** 23,26 **** --- 23,27 ---- using System.IO; using System.Xml; + using System.Text; using System.Text.RegularExpressions; using Microsoft.Tools.WindowsInstallerXml.Cab; *************** *** 55,58 **** --- 56,60 ---- private Hashtable fileSearchSignatures = new Hashtable(); private Hashtable directorySearchSignatures = new Hashtable(); + private bool foundError; private XmlTextWriter writer; *************** *** 66,69 **** --- 68,72 ---- public Decompiler() { + this.foundError = false; } *************** *** 78,89 **** /// <summary> ! /// Event for verbose messages. ! /// </summary> ! public event VerboseEventHandler VerboseMessage; ! ! /// <summary> ! /// Event for warning messages. /// </summary> ! public event WarningEventHandler WarningMessage; /// <summary> --- 81,87 ---- /// <summary> ! /// Event for messages. /// </summary> ! public event MessageEventHandler Message; /// <summary> *************** *** 268,286 **** using (this.inputDatabase = new Database(inputPath, OpenDatabase.ReadOnly)) { ! // create the XmlDocument ! this.writer = new XmlTextWriter(outputPath, System.Text.Encoding.UTF8); ! this.writer.Formatting = Formatting.Indented; // use indenting for readability ! this.ProcessProductElement(this.writer, true); ! this.writer.Flush(); ! this.writer.Close(); } } finally { this.inputDatabase = null; this.outputFolder = null; } - return; } --- 266,299 ---- using (this.inputDatabase = new Database(inputPath, OpenDatabase.ReadOnly)) { ! using (MemoryStream memoryStream = new MemoryStream()) ! { ! using (StreamWriter streamWriter = new StreamWriter(memoryStream, Encoding.UTF8)) ! { ! this.writer = new XmlTextWriter(streamWriter); ! this.writer.Formatting = Formatting.Indented; // use indenting for readability ! // do the actual processing to an internal buffer ! this.ProcessProductElement(this.writer, true); ! ! // if no error was found, save the result to the specified file ! if (!this.foundError) ! { ! this.writer.Flush(); ! ! using (FileStream fileStream = File.Create(outputPath)) ! { ! memoryStream.WriteTo(fileStream); ! } ! } ! } ! } } } finally { + this.writer.Close(); this.inputDatabase = null; this.outputFolder = null; } } *************** *** 381,385 **** this.ProcessModuleSignatureTable(ref moduleName, ref moduleId, ref moduleLanguage, ref moduleVersion); this.moduleIdUnderscored = moduleId.Replace("-", "_"); ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing module: {0}.{1}", moduleName, this.moduleIdUnderscored)); writer.WriteStartElement("Module"); --- 394,398 ---- this.ProcessModuleSignatureTable(ref moduleName, ref moduleId, ref moduleLanguage, ref moduleVersion); this.moduleIdUnderscored = moduleId.Replace("-", "_"); ! this.OnMessage(WixVerboses.ProcessingModule(null, VerboseLevel.Verbose, moduleName, this.moduleIdUnderscored)); writer.WriteStartElement("Module"); *************** *** 418,422 **** { writer.WriteStartElement("Product"); ! this.OnVerbose(VerboseLevel.Verbose, "Processing product..."); } --- 431,435 ---- { writer.WriteStartElement("Product"); ! this.OnMessage(WixVerboses.ProcessingProduct(null, VerboseLevel.Verbose)); } *************** *** 442,446 **** { this.writer.WriteStartElement("UI"); ! this.OnVerbose(VerboseLevel.Verbose, "Processing UI..."); this.ProcessUIProperties(); --- 455,459 ---- { this.writer.WriteStartElement("UI"); ! this.OnMessage(WixVerboses.ProcessingUI(null, VerboseLevel.Verbose)); this.ProcessUIProperties(); *************** *** 504,508 **** { this.writer.WriteStartElement("Package"); ! this.OnVerbose(VerboseLevel.Verbose, "Processing summary information..."); this.WriteAttributeString("Id", this.StripBraces(summary[9].ToString())); // PackageCode --- 517,521 ---- { this.writer.WriteStartElement("Package"); ! this.OnMessage(WixVerboses.ProcessingSummaryInformation(null, VerboseLevel.Verbose)); this.WriteAttributeString("Id", this.StripBraces(summary[9].ToString())); // PackageCode *************** *** 660,664 **** hasAppSearchTable = true; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing property table for property type: {0}", processPropertyType.ToString())); string property; --- 673,677 ---- hasAppSearchTable = true; } ! this.OnMessage(WixVerboses.ProcessingPropertyType(null, VerboseLevel.Verbose, processPropertyType.ToString())); string property; *************** *** 741,745 **** if (!hasAppSearchEntry && processPropertyType == propertyType) { ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing property: {0}", property)); // package property types are stored as attributes on the parent attribute --- 754,758 ---- if (!hasAppSearchEntry && processPropertyType == propertyType) { ! this.OnMessage(WixVerboses.ProcessingProperty(null, VerboseLevel.Verbose, property)); // package property types are stored as attributes on the parent attribute *************** *** 783,787 **** { string signature = fileRecord[(int)MsiInterop.Signature.Signature]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing file search signature: {0}", signature)); if (this.fileSearchSignatures.ContainsKey(this.StripModuleId(signature))) --- 796,800 ---- { string signature = fileRecord[(int)MsiInterop.Signature.Signature]; ! this.OnMessage(WixVerboses.ProcessingFileSearchSignature(null, VerboseLevel.Verbose, signature)); if (this.fileSearchSignatures.ContainsKey(this.StripModuleId(signature))) *************** *** 851,855 **** this.writer.WriteStartElement("PropertyRef"); this.WriteAttributeString("Id", this.StripModuleId(property)); ! this.OnWarning(WarningLevel.Major, String.Format("AppSearch table entry Property {0} occurs more than once and will likely cause a decompiler break.", property)); // finish the property element this.writer.WriteEndElement(); --- 864,868 ---- this.writer.WriteStartElement("PropertyRef"); this.WriteAttributeString("Id", this.StripModuleId(property)); ! this.OnMessage(WixWarnings.MultipleAppSearch(null, WarningLevel.Major, property)); // finish the property element this.writer.WriteEndElement(); *************** *** 1330,1337 **** else if (this.processingModule) { ! this.OnWarning(WarningLevel.Major, String.Format("There is a LaunchCondition table in a merge module which is explicitly not allowed by the Windows Installer. This LaunchCondition table will not be processed.")); return; } ! this.OnVerbose(VerboseLevel.Verbose, "Processing launch conditions..."); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "`"))) --- 1343,1350 ---- else if (this.processingModule) { ! this.OnMessage(WixWarnings.IllegalMergeModuleTable(null, WarningLevel.Major, "LaunchCondition")); return; } ! this.OnMessage(WixVerboses.ProcessingLaunchConditions(null, VerboseLevel.Verbose)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "`"))) *************** *** 1342,1346 **** this.writer.WriteStartElement("Condition"); this.WriteAttributeString("Message", record[(int)MsiInterop.LaunchCondition.Description]); ! this.writer.WriteString(record[(int)MsiInterop.LaunchCondition.Condition]); this.writer.WriteEndElement(); } --- 1355,1359 ---- this.writer.WriteStartElement("Condition"); this.WriteAttributeString("Message", record[(int)MsiInterop.LaunchCondition.Description]); ! this.writer.WriteCData(record[(int)MsiInterop.LaunchCondition.Condition]); this.writer.WriteEndElement(); } *************** *** 1359,1363 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, "Processing feature conditions..."); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_` = '", feature, "'"))) --- 1372,1376 ---- return; } ! this.OnMessage(WixVerboses.ProcessingFeatureConditions(null, VerboseLevel.Verbose)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_` = '", feature, "'"))) *************** *** 1368,1372 **** this.writer.WriteStartElement(tableName); this.WriteAttributeString("Level", record[(int)MsiInterop.Condition.Level]); ! this.writer.WriteString(record[(int)MsiInterop.Condition.Condition]); this.writer.WriteEndElement(); } --- 1381,1385 ---- this.writer.WriteStartElement(tableName); this.WriteAttributeString("Level", record[(int)MsiInterop.Condition.Level]); ! this.writer.WriteCData(record[(int)MsiInterop.Condition.Condition]); this.writer.WriteEndElement(); } *************** *** 1385,1389 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing feature components for feature: {0}", feature)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_`='", feature, "'"))) --- 1398,1402 ---- return; } ! this.OnMessage(WixVerboses.ProcessingFeatureComponents(null, VerboseLevel.Verbose, feature)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_`='", feature, "'"))) *************** *** 1393,1397 **** { string component = record[(int)MsiInterop.FeatureComponents.Component]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing feature component: {0}", component)); this.writer.WriteStartElement("ComponentRef"); --- 1406,1410 ---- { string component = record[(int)MsiInterop.FeatureComponents.Component]; ! this.OnMessage(WixVerboses.ProcessingFeatureComponent(null, VerboseLevel.Verbose, component)); this.writer.WriteStartElement("ComponentRef"); *************** *** 1414,1418 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing class table for feature '{0}' component '{1}'...", feature, component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_`='", feature, "' AND `Component_`='", component, "'"))) --- 1427,1431 ---- return; } ! this.OnMessage(WixVerboses.ProcessingClass(null, VerboseLevel.Verbose, feature, component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_`='", feature, "' AND `Component_`='", component, "'"))) *************** *** 1423,1427 **** this.writer.WriteStartElement(tableName); string classId = record[(int)MsiInterop.Class.CLSID]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing class id: {0}", classId)); this.WriteAttributeString("Id", this.StripBraces(classId)); --- 1436,1440 ---- this.writer.WriteStartElement(tableName); string classId = record[(int)MsiInterop.Class.CLSID]; ! this.OnMessage(WixVerboses.ProcessingClass(null, VerboseLevel.Verbose, classId)); this.WriteAttributeString("Id", this.StripBraces(classId)); *************** *** 1463,1471 **** if (0 < defProgId.Length) { ! this.OnWarning(WarningLevel.Major, String.Format("Default ProgId '{0}' was provided for ClassId '{1}' but there was no ProgId table. The output source file will likely not compile/link.", defProgId, classId)); } return; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing progid table...")); string queryPrimary = String.Concat("SELECT * FROM `", tableName, "` WHERE `Class_`='", classId, "'"); --- 1476,1484 ---- if (0 < defProgId.Length) { ! this.OnMessage(WixWarnings.MissingProgId(null, WarningLevel.Major, defProgId, classId)); } return; } ! this.OnMessage(WixVerboses.ProcessingProgId(null, VerboseLevel.Verbose)); string queryPrimary = String.Concat("SELECT * FROM `", tableName, "` WHERE `Class_`='", classId, "'"); *************** *** 1489,1493 **** this.writer.WriteStartElement(tableName); string progId = record[(int)MsiInterop.ProgId.ProgId]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing ProgId: {0}", progId)); this.WriteAttributeString("Id", this.StripBraces(progId)); --- 1502,1506 ---- this.writer.WriteStartElement(tableName); string progId = record[(int)MsiInterop.ProgId.ProgId]; ! this.OnMessage(WixVerboses.ProcessingProgId(null, VerboseLevel.Verbose, progId)); this.WriteAttributeString("Id", this.StripBraces(progId)); *************** *** 1525,1529 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, "Processing extension table..."); string query = String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_`='", feature, "' AND `Component_`='", component, "' AND `ProgId_`="); --- 1538,1542 ---- return; } ! this.OnMessage(WixVerboses.ProcessingExtension(null, VerboseLevel.Verbose)); string query = String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_`='", feature, "' AND `Component_`='", component, "' AND `ProgId_`="); *************** *** 1543,1547 **** this.writer.WriteStartElement(tableName); string extension = record[(int)MsiInterop.Extension.Extension]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing extension: {0}", extension)); this.WriteAttributeString("ContentType", record[(int)MsiInterop.Extension.MIME]); --- 1556,1560 ---- this.writer.WriteStartElement(tableName); string extension = record[(int)MsiInterop.Extension.Extension]; ! this.OnMessage(WixVerboses.ProcessingExtension(null, VerboseLevel.Verbose, extension)); this.WriteAttributeString("ContentType", record[(int)MsiInterop.Extension.MIME]); *************** *** 1565,1572 **** else if (this.processingModule) { ! this.OnWarning(WarningLevel.Major, String.Format("There is a Feature table in a merge module which is explicitly not allowed by the Windows Installer. This Feature table will not be processed.")); return; } ! this.OnVerbose(VerboseLevel.Verbose, "Processing feature table..."); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_Parent` = '", parent, "' ORDER BY Display"))) --- 1578,1585 ---- else if (this.processingModule) { ! this.OnMessage(WixWarnings.IllegalMergeModuleTable(null, WarningLevel.Major, "Feature")); return; } ! this.OnMessage(WixVerboses.ProcessingFeature(null, VerboseLevel.Verbose)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Feature_Parent` = '", parent, "' ORDER BY Display"))) *************** *** 1576,1580 **** { string featureName = record[(int)MsiInterop.Feature.Feature]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing feature: {0}", featureName)); int displayLevel = 0; --- 1589,1593 ---- { string featureName = record[(int)MsiInterop.Feature.Feature]; ! this.OnMessage(WixVerboses.ProcessingFeature(null, VerboseLevel.Verbose, featureName)); int displayLevel = 0; *************** *** 1647,1651 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, "Processing directory table..."); string query = String.Concat("SELECT * FROM `", tableName, "`"); --- 1660,1664 ---- return; } ! this.OnMessage(WixVerboses.ProcessingDirectory(null, VerboseLevel.Verbose)); string query = String.Concat("SELECT * FROM `", tableName, "`"); *************** *** 1664,1668 **** if (!this.processedDirectories.ContainsKey(directoryName)) { ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing directory: {0}", directoryName)); string newParent = record[(int)MsiInterop.Directory.DirectoryParent]; --- 1677,1681 ---- if (!this.processedDirectories.ContainsKey(directoryName)) { ! this.OnMessage(WixVerboses.ProcessingDirectory(null, VerboseLevel.Verbose, directoryName)); string newParent = record[(int)MsiInterop.Directory.DirectoryParent]; *************** *** 1732,1736 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, "Processing environment table..."); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) --- 1745,1749 ---- return; } ! this.OnMessage(WixVerboses.ProcessingEnvironment(null, VerboseLevel.Verbose)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) *************** *** 1741,1745 **** this.writer.WriteStartElement(tableName); string env = record[(int)MsiInterop.Environment.Environment]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing environment: {0}", env)); this.WriteAttributeString("Id", env); --- 1754,1758 ---- this.writer.WriteStartElement(tableName); string env = record[(int)MsiInterop.Environment.Environment]; ! this.OnMessage(WixVerboses.ProcessingEnvironment(null, VerboseLevel.Verbose, env)); this.WriteAttributeString("Id", env); *************** *** 1849,1853 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing remove file table for component: {0}", component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) --- 1862,1866 ---- return; } ! this.OnMessage(WixVerboses.ProcessingRemoveFile(null, VerboseLevel.Verbose, component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) *************** *** 1894,1898 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing remove reserve cost for component: {0}", component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) --- 1907,1911 ---- return; } ! this.OnMessage(WixVerboses.ProcessingReserveCost(null, VerboseLevel.Verbose, component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) *************** *** 1922,1926 **** return; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing shortcut table for component: {0}", component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) --- 1935,1939 ---- return; } ! this.OnMessage(WixVerboses.ProcessingShortcutForComponent(null, VerboseLevel.Verbose, component)); using (View view = this.inputDatabase.OpenExecuteView(String.Concat("SELECT * FROM `", tableName, "` WHERE `Component_` = '", component, "'"))) *************** *** 1931,1935 **** this.writer.WriteStartElement(tableName); string shortcut = record[(int)MsiInterop.Shortcut.Shortcut]; ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing shortcut: {0}", shortcut)); this.WriteAttributeString("Id", shortcut); --- 1944,1948 ---- this.writer.WriteStartElement(tableName); string shortcut = record[(int)MsiInterop.Shortcut.Shortcut]; ! this.OnMessage(WixVerboses.ProcessingShortcut(null, VerboseLevel.Verbose, shortcut)); this.WriteAttributeString("Id", shortcut); *************** *** 2065,2069 **** { this.writer.WriteStartElement("Condition"); ! this.writer.WriteString(condition); this.writer.WriteEndElement(); } --- 2078,2082 ---- { this.writer.WriteStartElement("Condition"); ! this.writer.WriteCData(condition); this.writer.WriteEndElement(); } *************** *** 2131,2135 **** if (File.Exists(wixFileSpec) && wixFileSpec != cabFileSpec) { ! this.OnWarning(WarningLevel.Major, String.Format("Overwriting File '{0}' on disk.", wixFileSpec)); File.Delete(wixFileSpec); } --- 2144,2148 ---- if (File.Exists(wixFileSpec) && wixFileSpec != cabFileSpec) { ! this.OnMessage(WixWarnings.OverwritingFile(null, WarningLevel.Major, wixFileSpec)); File.Delete(wixFileSpec); } *************** *** 2144,2148 **** if (File.Exists(srcFileSpec) && wixFileSpec != srcFileSpec) { ! this.OnWarning(WarningLevel.Major, String.Format("Overwriting File '{0}' on disk.", srcFileSpec)); File.Delete(srcFileSpec); } --- 2157,2161 ---- if (File.Exists(srcFileSpec) && wixFileSpec != srcFileSpec) { ! this.OnMessage(WixWarnings.OverwritingFile(null, WarningLevel.Major, srcFileSpec)); File.Delete(srcFileSpec); } *************** *** 2787,2791 **** if (0 >= record[(int)MsiInterop.LockPermissions.Permission].Length) { ! this.OnWarning(WarningLevel.Major, String.Format("Null in LockPermission.Permission field is reserved for future use. Decompiler likely to fail.")); } long bits = Convert.ToInt64(record[(int)MsiInterop.LockPermissions.Permission]); // nullable field, though reserved for future use --- 2800,2804 ---- if (0 >= record[(int)MsiInterop.LockPermissions.Permission].Length) { ! this.OnMessage(WixWarnings.NullLockPermissionPermission(null, WarningLevel.Major)); } long bits = Convert.ToInt64(record[(int)MsiInterop.LockPermissions.Permission]); // nullable field, though reserved for future use *************** *** 2843,2847 **** else if (this.processingModule) { ! this.OnWarning(WarningLevel.Major, String.Format("There is a Media table in a merge module which is explicitly not allowed by the Windows Installer. This Feature table will not be processed.")); return; } --- 2856,2860 ---- else if (this.processingModule) { ! this.OnMessage(WixWarnings.IllegalMergeModuleTable(null, WarningLevel.Major, "Media")); return; } *************** *** 2895,2899 **** if (this.skipVSI && "dirca_checkfx" == id.ToLower()) { ! this.OnWarning(WarningLevel.Major, String.Format("Skipping CustomAction 'dirca_checkfx'. User asked to filter out problematic VSI constructs.", tableName)); continue; } --- 2908,2912 ---- if (this.skipVSI && "dirca_checkfx" == id.ToLower()) { ! this.OnMessage(WixWarnings.FilteringVSIStuff(null, WarningLevel.Major, "CustomAction", "dirca_checkfx")); continue; } *************** *** 3106,3110 **** while (view.Fetch(out record)) { ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing table: {0}", sequenceTableName)); if (!tableStarted) { --- 3119,3123 ---- while (view.Fetch(out record)) { ! this.OnMessage(WixVerboses.ProcessingSequence(null, VerboseLevel.Verbose, sequenceTableName)); if (!tableStarted) { *************** *** 3128,3135 **** if (this.skipVSI && "dirca_checkfx" == action.ToLower()) { ! this.OnWarning(WarningLevel.Major, String.Format("Skipping CustomAction 'dirca_checkfx' while processing {0}. User asked to filter out problematic VSI constructs.", sequenceTableName)); continue; } ! this.OnVerbose(VerboseLevel.Verbose, String.Format("Processing action: {0}", action)); if (null != this.standardActions[sequenceType, action]) // custom action --- 3141,3148 ---- if (this.skipVSI && "dirca_checkfx" == action.ToLower()) { ! this.OnMessage(WixWarnings.FilteringVSIStuff(null, WarningLevel.Major, "CustomAction", "dirca_checkfx")); continue; } ! this.OnMessage(WixVerboses.ProcessingAction(null, VerboseLevel.Verbose, action)); if (null != this.standardActions[sequenceType, action]) // custom action *************** *** 3171,3175 **** { this.WriteAttributeString("Before", action); ! this.writer.WriteString(lastCondition); this.writer.WriteEndElement(); --- 3184,3188 ---- { this.WriteAttributeString("Before", action); ! this.writer.WriteCData(lastCondition); this.writer.WriteEndElement(); *************** *** 3192,3196 **** if (0x013 != (actionType & 0x013) && 0x023 != (actionType & 0x023) && 0x033 != (actionType & 0x033)) { ! this.OnWarning(WarningLevel.Major, String.Format("Encountered CustomAction '{0}' while processing AdvtExecuteSequence. CustomActions are not permitted in the AdvtExecuteSequence and will not be output to decompiled source file.", action)); continue; } --- 3205,3209 ---- if (0x013 != (actionType & 0x013) && 0x023 != (actionType & 0x023) && 0x033 != (actionType & 0x033)) { ! this.OnMessage(WixWarnings.IllegalAdvtExecuteSequenceCustomAction(null, WarningLevel.Major, action)); continue; } *************** *** 3226,3230 **** else { ! this.OnWarning(WarningLevel.Major, String.Format("Action '{0}' in sequence '{1}' is not a custom action, dialog, supported standard action, or known special action so this being left out.", action, sequenceTableName)); } } --- 3239,3243 ---- else { ! this.OnMessage(WixWarnings.UnknownAction(null, WarningLevel.Major, action, sequenceTableName)); } } *************** *** 3289,3293 **** if (0 < condition.Length) { ! this.writer.WriteString(condition); } this.writer.WriteEndElement(); --- 3302,3306 ---- if (0 < condition.Length) { ! this.writer.WriteCData(condition); } this.writer.WriteEndElement(); *************** *** 3302,3306 **** if (0 < condition.Length) { ! this.writer.WriteString(this.StripModuleId(condition)); } this.writer.WriteEndElement(); --- 3315,3319 ---- if (0 < condition.Length) { ! this.writer.WriteCData(this.StripModuleId(condition)); } this.writer.WriteEndElement(); *************** *** 3346,3350 **** if (this.skipVSI && "dirca_checkfx" == id.ToLower()) { ! this.OnWarning(WarningLevel.Major, String.Format("Skipping Binary 'dirca_checkfx'. User asked to filter out problematic VSI constructs.", tableName)); continue; } --- 3359,3363 ---- if (this.skipVSI && "dirca_checkfx" == id.ToLower()) { ! this.OnMessage(WixWarnings.FilteringVSIStuff(null, WarningLevel.Major, "Binary", "dirca_checkfx")); continue; } *************** *** 3798,3802 **** } this.WriteAttributeString("Value", publishRecord[(int)MsiInterop.ControlEvent.Argument]); ! this.writer.WriteString(publishRecord[(int)MsiInterop.ControlEvent.Condition]); this.writer.WriteEndElement(); } --- 3811,3815 ---- } this.WriteAttributeString("Value", publishRecord[(int)MsiInterop.ControlEvent.Argument]); ! this.writer.WriteCData(publishRecord[(int)MsiInterop.ControlEvent.Condition]); this.writer.WriteEndElement(); } *************** *** 3828,3832 **** this.writer.WriteStartElement("Condition"); this.WriteAttributeString("Action", conditionRecord[(int)MsiInterop.ControlCondition.Action].ToLower()); ! this.writer.WriteString(conditionRecord[(int)MsiInterop.ControlCondition.Condition]); this.writer.WriteEndElement(); } --- 3841,3845 ---- this.writer.WriteStartElement("Condition"); this.WriteAttributeString("Action", conditionRecord[(int)MsiInterop.ControlCondition.Action].ToLower()); ! this.writer.WriteCData(conditionRecord[(int)MsiInterop.ControlCondition.Condition]); this.writer.WriteEndElement(); } *************** *** 3964,3968 **** else if (this.processingModule) { ! this.OnWarning(WarningLevel.Major, String.Format("There is an Error table in a merge module which is explicitly not allowed by the Windows Installer. This Error table will not be processed.")); return; } --- 3977,3981 ---- else if (this.processingModule) { ! this.OnMessage(WixWarnings.IllegalMergeModuleTable(null, WarningLevel.Major, "Error")); return; } *************** *** 4019,4023 **** else { ! this.OnWarning(WarningLevel.Major, String.Format("Unable to identify the appended GUID on Identifier ModuleSignature.ModuleId {0}. The Element Module, Attribute guid will be incorrect as will all the identifiers. The generated file will need significant manual intervention in order for it to compile.", name)); id = name; } --- 4032,4036 ---- else { ! this.OnMessage(WixWarnings.UnknownModularization(null, WarningLevel.Major, name)); id = name; } *************** *** 4150,4154 **** { string wrongGuidDotted = guidMatch.Value; ! this.OnWarning(WarningLevel.Major, String.Format("Identifier {0} appended Guid {1} does not match module Guid {2}. Truncating mismatched Guid in to conform with topic \"Naming Primary Keys in Merge Module Databases [Windows Installer]\"", str, wrongGuidDotted, dottedModuleGuid)); str = str.Replace(wrongGuidDotted, ""); // remove any occurrances of the ModuleGuid } --- 4163,4167 ---- { string wrongGuidDotted = guidMatch.Value; ! this.OnMessage(WixWarnings.UnknownModularization(null, WarningLevel.Major, str, wrongGuidDotted, dottedModuleGuid)); str = str.Replace(wrongGuidDotted, ""); // remove any occurrances of the ModuleGuid } *************** *** 4194,4219 **** /// <summary> ! /// Sends a message to the verbose delegate if there is one. /// </summary> ! /// <param name="level">Verbose level.</param> ! /// <param name="message">Message to send.</param> ! private void OnVerbose(VerboseLevel level, string message) { ! if (null != this.VerboseMessage) { ! this.VerboseMessage(this, new VerboseEventArgs(level, message)); } ! } ! ! /// <summary> ! /// Sends a message to the warning delegate if there is one. ! /// </summary> ! /// <param name="level">Warning level.</param> ! /// <param name="message">Message to send.</param> ! private void OnWarning(WarningLevel level, string message) ! { ! if (null != this.WarningMessage) { ! this.WarningMessage(this, new WarningEventArgs(level, message)); } } --- 4207,4222 ---- /// <summary> ! /// Sends a message to the message delegate if there is one. /// </summary> ! /// <param name="mea">Message event arguments.</param> ! private void OnMessage(MessageEventArgs mea) { ! if (mea is WixError) { ! this.foundError = true; } ! if (null != this.Message) { ! this.Message(this, mea); } } Index: Common.cs =================================================================== RCS file: /cvsroot/wix/wix/src/wix/Common.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Common.cs 28 Jul 2004 15:50:22 -0000 1.3 --- Common.cs 7 Aug 2004 21:14:59 -0000 1.4 *************** *** 29,46 **** /// <summary> - /// Warning message event handler delegate. - /// </summary> - /// <param name="sender">Sender of the warning.</param> - /// <param name="args">Arguments for the event.</param> - public delegate void WarningEventHandler(object sender, WarningEventArgs args); - - /// <summary> - /// Verbose message event handler delegate. [...1488 lines suppressed...] + // URL: + // Class: Operating System Properties + // URL: Operating System Properties [Windows Installer]: http://msdn.microsoft.com/library/en-us/msi/setup/operating_system_properties.asp + standardProperties.Add("WindowsBuild", "Property"); + + // Name: WindowsFolder + // Desc: + // URL: + // Class: System Folder Properties + // URL: System Folder Properties [Windows Installer]: http://msdn.microsoft.com/library/en-us/msi/setup/system_folder_properties.asp + standardProperties.Add("WindowsFolder", "Property"); + + // Name: WindowsVolume + // Desc: + // URL: + // Class: System Folder Properties + // URL: System Folder Properties [Windows Installer]: http://msdn.microsoft.com/library/en-us/msi/setup/system_folder_properties.asp + standardProperties.Add("WindowsVolume", "Property"); } Index: Librarian.cs =================================================================== RCS file: /cvsroot/wix/wix/src/wix/Librarian.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Librarian.cs 5 Apr 2004 07:16:18 -0000 1.1 --- Librarian.cs 7 Aug 2004 21:14:59 -0000 1.2 *************** *** 28,31 **** --- 28,32 ---- private TableDefinitionCollection tableDefinitions; private ArrayList intermediates; + private bool foundError; /// <summary> *************** *** 36,50 **** this.tableDefinitions = Common.GetTableDefinitions(); this.intermediates = new ArrayList(); } /// <summary> ! /// Event for verbose messages. ! /// </summary> ! public event VerboseEventHandler VerboseMessage; ! ! /// <summary> ! /// Event for warning messages. /// </summary> ! public event WarningEventHandler WarningMessage; /// <summary> --- 37,47 ---- this.tableDefinitions = Common.GetTableDefinitions(); this.intermediates = new ArrayList(); + this.foundError = false; } /// <summary> ! /// Event for messages. /// </summary> ! public event MessageEventHandler Message; /// <summary> *************** *** 74,103 **** library.Validate(); ! return library; } /// <summary> ! /// Sends a message to the verbose delegate if there is one. /// </summary> ! /// <param name="level">Verbose level.</param> ! /// <param name="message">Message to send.</param> ! private void OnVerbose(VerboseLevel level, string message) { ! if (null != this.VerboseMessage) { ! this.VerboseMessage(this, new VerboseEventArgs(level, message)); } ! } ! ! /// <summary> ! /// Sends a message to the warning delegate if there is one. ! /// </summary> ! /// <param name="level">Warning level.</param> ! /// <param name="message">Message to send.</param> ! private void OnWarning(WarningLevel level, string message) ! { ! if (null != this.WarningMessage) { ! this.WarningMessage(this, new WarningEventArgs(level, message)); } } --- 71,90 ---- library.Validate(); ! return (this.foundError ? null : library); } /// <summary> ! /// Sends a message to the message delegate if there is one. /// </summary> ! /// <param name="mea">Message event arguments.</param> ! private void OnMessage(MessageEventArgs mea) { ! if (mea is WixError) { ! this.foundError = true; } ! if (null != this.Message) { ! this.Message(this, mea); } } Index: WixException.cs =================================================================== RCS file: /cvsroot/wix/wix/src/wix/WixException.cs,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** WixException.cs 28 Jul 2004 15:50:23 -0000 1.5 --- WixException.cs 7 Aug 2004 21:14:59 -0000 1.6 *************** *** 96,101 **** /// <summary>Merge module open exception type.</summary> MergeModuleOpen, - /// <summary>Required WiX version not met exception type.</summary> - InsufficientVersion, /// <summary>Object or library files were a different version on output than input.</summary> VersionMismatch, --- 96,99 ---- Index: Compiler.cs =================================================================== RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** Compiler.cs 28 Jul 2004 15:50:22 -0000 1.10 --- Compiler.cs 7 Aug 2004 21:14:59 -0000 1.11 *************** *** 24,27 **** --- 24,28 ---- using System.Collections; using System.Diagnostics; + using System.Globalization; using System.Reflection; using System.Xml; *************** *** 33,36 **** --- 34,41 ---- public sealed class Compiler { + private const int IntegerNotFound = int.MinValue; + private const int IllegalInteger = int.MinValue + 1; + private const string IllegalGuid = "IllegalGuid"; + private TableDefinitionCollection tableDefinitions; private Intermediate activeIntermediate; *************** *** 4223,4226 **** --- 4228,4232 ---- /// </summary> /// <param name="node">Element to parse.</param> + /// <remarks>cleaned</remarks> private void ParseModuleElement(XmlNode node) { *************** *** 4231,4235 **** this.activeName = null; ! this.activeLanguage = 0; foreach (XmlAttribute attrib in node.Attributes) --- 4237,4241 ---- this.activeName = null; ! this.activeLanguage = IntegerNotFound; foreach (XmlAttribute attrib in node.Attributes) *************** *** 4238,4258 **** { case "Codepage": ! codepage = Convert.ToInt32(attrib.Value); ! break; ! case "Id": ! this.activeName = attrib.Value; break; case "Guid": ! Guid guid = new Guid(attrib.Value); ! moduleId = guid.ToString().ToUpper().Replace("-", "_"); break; case "Language": ! this.activeLanguage = Convert.ToInt32(attrib.Value); break; case "Version": ! version = attrib.Value; break; } } try --- 4244,4286 ---- { case "Codepage": ! codepage = this.GetAttributeIntegerValue(sourceLineNumbers, attrib); break; case "Guid": ! moduleId = this.GetAttributeGuidValue(sourceLineNumbers, attrib); ! break; ! case "Id": ! this.activeName = this.GetAttributeValue(sourceLineNumbers, attrib); break; case "Language": ! this.activeLanguage = this.GetAttributeIntegerValue(sourceLineNumbers, attrib); break; case "Version": ! version = this.GetAttributeValue(sourceLineNumbers, attrib); ! break; ! default: ! this.UnexpectedAttribute(sourceLineNumbers, attrib); break; } } + if (null == moduleId) + { + this.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name, "Guid")); + } + if (null == this.activeName) + { + this.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name, "Id")); + } + if (IntegerNotFound == this.activeLanguage) + { + ... [truncated message content] |