コード例 #1
0
        /// <summary>
        /// Adds the PatchFiles action to the sequence table if it does not already exist.
        /// </summary>
        /// <param name="table">The sequence table to check or modify.</param>
        /// <param name="mainTransform">The primary authoring transform.</param>
        /// <param name="pairedTransform">The secondary patch transform.</param>
        /// <param name="mainFileRow">The file row that contains information about the patched file.</param>
        private void AddPatchFilesActionToSequenceTable(SequenceTable table, Output mainTransform, Output pairedTransform, Row mainFileRow)
        {
            // Find/add PatchFiles action (also determine sequence for it).
            // Search mainTransform first, then pairedTransform (pairedTransform overrides).
            bool   hasPatchFilesAction = false;
            int    seqInstallFiles     = 0;
            int    seqDuplicateFiles   = 0;
            string tableName           = table.ToString();

            TestSequenceTableForPatchFilesAction(
                mainTransform.Tables[tableName],
                ref hasPatchFilesAction,
                ref seqInstallFiles,
                ref seqDuplicateFiles);
            TestSequenceTableForPatchFilesAction(
                pairedTransform.Tables[tableName],
                ref hasPatchFilesAction,
                ref seqInstallFiles,
                ref seqDuplicateFiles);
            if (!hasPatchFilesAction)
            {
                Table iesTable = pairedTransform.EnsureTable(this.TableDefinitions[tableName]);
                if (0 == iesTable.Rows.Count)
                {
                    iesTable.Operation = TableOperation.Add;
                }

                Row          patchAction    = iesTable.CreateRow(null);
                WixActionRow wixPatchAction = WindowsInstallerStandardInternal.GetStandardActionRows()[table, "PatchFiles"];
                int          sequence       = wixPatchAction.Sequence;
                // Test for default sequence value's appropriateness
                if (seqInstallFiles >= sequence || (0 != seqDuplicateFiles && seqDuplicateFiles <= sequence))
                {
                    if (0 != seqDuplicateFiles)
                    {
                        if (seqDuplicateFiles < seqInstallFiles)
                        {
                            throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action));
                        }
                        else
                        {
                            sequence = (seqDuplicateFiles + seqInstallFiles) / 2;
                            if (seqInstallFiles == sequence || seqDuplicateFiles == sequence)
                            {
                                throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action));
                            }
                        }
                    }
                    else
                    {
                        sequence = seqInstallFiles + 1;
                    }
                }
                patchAction[0]        = wixPatchAction.Action;
                patchAction[1]        = wixPatchAction.Condition;
                patchAction[2]        = sequence;
                patchAction.Operation = RowOperation.Add;
            }
        }
コード例 #2
0
ファイル: WixActionRow.cs プロジェクト: zooba/wix3
 /// <summary>
 /// Instantiates a standard ActionRow.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the standard action.</param>
 /// <param name="action">The name of the standard action.</param>
 /// <param name="condition">The condition of the standard action.</param>
 /// <param name="sequence">The suggested sequence number of the standard action.</param>
 private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence)
     : base(null, Installer.GetTableDefinitions()["WixAction"])
 {
     this.SequenceTable = sequenceTable;
     this.Action = action;
     this.Condition = condition;
     this.Sequence = sequence;
     this.Overridable = true; // all standard actions are overridable by default
 }
コード例 #3
0
 /// <summary>
 /// Instantiates a standard ActionRow.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the standard action.</param>
 /// <param name="action">The name of the standard action.</param>
 /// <param name="condition">The condition of the standard action.</param>
 /// <param name="sequence">The suggested sequence number of the standard action.</param>
 private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence) :
     base(null, Installer.GetTableDefinitions()["WixAction"])
 {
     this.SequenceTable = sequenceTable;
     this.Action        = action;
     this.Condition     = condition;
     this.Sequence      = sequence;
     this.Overridable   = true; // all standard actions are overridable by default
 }
コード例 #4
0
 private IEnumerable <WixActionSymbol> GetActions(SequenceTable sequence, string[] actionNames)
 {
     foreach (var action in WindowsInstallerStandard.StandardActions())
     {
         if (action.SequenceTable == sequence && actionNames.Contains(action.Action))
         {
             yield return(action);
         }
     }
 }
コード例 #5
0
        private RelativeActions GetAllRelativeActionsForSequenceType(SequenceTable sequenceType, WixActionSymbol action)
        {
            var relativeActions = new RelativeActions();

            if (this.RelativeActionsForActions.TryGetValue(action.Id.Id, out var actionRelatives))
            {
                this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.PreviousActions, relativeActions.PreviousActions);

                this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.NextActions, relativeActions.NextActions);
            }

            return(relativeActions);
        }
コード例 #6
0
 /// <summary>
 /// Get all the actions scheduled after this one in a particular sequence table.
 /// </summary>
 /// <param name="sequenceTable">The sequence table.</param>
 /// <param name="allNextActionRows">A RowCollection which will contain all the next actions.</param>
 internal void GetAllNextActionRows(SequenceTable sequenceTable, RowCollection allNextActionRows)
 {
     if (null != this.nextActionRows)
     {
         foreach (WixActionRow actionRow in this.nextActionRows)
         {
             if (sequenceTable == actionRow.SequenceTable)
             {
                 actionRow.GetAllPreviousActionRows(sequenceTable, allNextActionRows);
                 allNextActionRows.Add(actionRow);
                 actionRow.GetAllNextActionRows(sequenceTable, allNextActionRows);
             }
         }
     }
 }
コード例 #7
0
ファイル: WixActionRow.cs プロジェクト: fyodorkor/Data
 /// <summary>
 /// Get all the actions scheduled after this one in a particular sequence table.
 /// </summary>
 /// <param name="sequenceTable">The sequence table.</param>
 /// <param name="allNextActionRows">A RowCollection which will contain all the next actions.</param>
 public void GetAllNextActionRows(SequenceTable sequenceTable, IList <WixActionRow> allNextActionRows)
 {
     if (null != this.nextActionRows)
     {
         foreach (WixActionRow actionRow in this.nextActionRows)
         {
             if (sequenceTable == actionRow.SequenceTable)
             {
                 actionRow.GetAllPreviousActionRows(sequenceTable, allNextActionRows);
                 allNextActionRows.Add(actionRow);
                 actionRow.GetAllNextActionRows(sequenceTable, allNextActionRows);
             }
         }
     }
 }
コード例 #8
0
        private void RecurseRelativeActionsForSequenceType(SequenceTable sequenceType, List <WixActionSymbol> actions, List <WixActionSymbol> visitedActions)
        {
            foreach (var action in actions.Where(a => a.SequenceTable == sequenceType))
            {
                if (this.RelativeActionsForActions.TryGetValue(action.Id.Id, out var actionRelatives))
                {
                    this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.PreviousActions, visitedActions);
                }

                visitedActions.Add(action);

                if (actionRelatives != null)
                {
                    this.RecurseRelativeActionsForSequenceType(sequenceType, actionRelatives.NextActions, visitedActions);
                }
            }
        }
コード例 #9
0
ファイル: VSCompiler.cs プロジェクト: wixtoolset/UnifiedTest1
        private void SchedulePropertyExeAction(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier name, string source, string cmdline, CustomActionSymbol caTemplate, string condition, string beforeAction, string afterAction)
        {
            const SequenceTable sequence = SequenceTable.InstallExecuteSequence;

            caTemplate.SourceType = CustomActionSourceType.Property;
            caTemplate.Source     = source;
            caTemplate.TargetType = CustomActionTargetType.Exe;
            caTemplate.Target     = cmdline;
            section.AddSymbol(caTemplate);

            section.AddSymbol(new WixActionSymbol(sourceLineNumbers, new Identifier(name.Access, sequence, name.Id))
            {
                SequenceTable = SequenceTable.InstallExecuteSequence,
                Action        = name.Id,
                Condition     = condition,
                // no explicit sequence
                Before      = beforeAction,
                After       = afterAction,
                Overridable = false,
            });

            if (null != beforeAction)
            {
                if (WindowsInstallerStandard.IsStandardAction(beforeAction))
                {
                    this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), beforeAction);
                }
                else
                {
                    this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, beforeAction);
                }
            }

            if (null != afterAction)
            {
                if (WindowsInstallerStandard.IsStandardAction(afterAction))
                {
                    this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), afterAction);
                }
                else
                {
                    this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, afterAction);
                }
            }
        }
コード例 #10
0
        public static SequenceTable CreateSequenceTable(string numberSequenceCode,
                                                        string scopeValue,
                                                        int quantityOfNumbers,
                                                        int next,
                                                        decimal interval,
                                                        global::System.DateTimeOffset dateTime,
                                                        int largest,
                                                        int smallest)
        {
            SequenceTable sequenceTable = new SequenceTable();

            sequenceTable.NumberSequenceCode = numberSequenceCode;
            sequenceTable.ScopeValue         = scopeValue;
            sequenceTable.QuantityOfNumbers  = quantityOfNumbers;
            sequenceTable.Next     = next;
            sequenceTable.Interval = interval;
            sequenceTable.DateTime = dateTime;
            sequenceTable.Largest  = largest;
            sequenceTable.Smallest = smallest;
            return(sequenceTable);
        }
コード例 #11
0
        /// <summary>
        /// Adds the PatchFiles action to the sequence table if it does not already exist.
        /// </summary>
        /// <param name="table">The sequence table to check or modify.</param>
        /// <param name="mainTransform">The primary authoring transform.</param>
        /// <param name="pairedTransform">The secondary patch transform.</param>
        /// <param name="mainFileRow">The file row that contains information about the patched file.</param>
        private void AddPatchFilesActionToSequenceTable(SequenceTable table, WindowsInstallerData mainTransform, WindowsInstallerData pairedTransform, Row mainFileRow)
        {
            var tableName = table.ToString();

            // Find/add PatchFiles action (also determine sequence for it).
            // Search mainTransform first, then pairedTransform (pairedTransform overrides).
            var hasPatchFilesAction    = false;
            var installFilesSequence   = 0;
            var duplicateFilesSequence = 0;

            TestSequenceTableForPatchFilesAction(
                mainTransform.Tables[tableName],
                ref hasPatchFilesAction,
                ref installFilesSequence,
                ref duplicateFilesSequence);
            TestSequenceTableForPatchFilesAction(
                pairedTransform.Tables[tableName],
                ref hasPatchFilesAction,
                ref installFilesSequence,
                ref duplicateFilesSequence);
            if (!hasPatchFilesAction)
            {
                WindowsInstallerStandard.TryGetStandardAction(tableName, "PatchFiles", out var patchFilesActionSymbol);

                var sequence = patchFilesActionSymbol.Sequence;

                // Test for default sequence value's appropriateness
                if (installFilesSequence >= sequence || (0 != duplicateFilesSequence && duplicateFilesSequence <= sequence))
                {
                    if (0 != duplicateFilesSequence)
                    {
                        if (duplicateFilesSequence < installFilesSequence)
                        {
                            throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action));
                        }
                        else
                        {
                            sequence = (duplicateFilesSequence + installFilesSequence) / 2;
                            if (installFilesSequence == sequence || duplicateFilesSequence == sequence)
                            {
                                throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action));
                            }
                        }
                    }
                    else
                    {
                        sequence = installFilesSequence + 1;
                    }
                }

                var sequenceTable = pairedTransform.EnsureTable(this.TableDefinitions[tableName]);
                if (0 == sequenceTable.Rows.Count)
                {
                    sequenceTable.Operation = TableOperation.Add;
                }

                var patchAction = sequenceTable.CreateRow(null);
                patchAction[0]        = patchFilesActionSymbol.Action;
                patchAction[1]        = patchFilesActionSymbol.Condition;
                patchAction[2]        = sequence;
                patchAction.Operation = RowOperation.Add;
            }
        }
コード例 #12
0
 /// <summary>
 /// Gets the SequenceTable enum as the Windows Installer table name.
 /// </summary>
 public static string WindowsInstallerTableName(this SequenceTable sequence) => (sequence == SequenceTable.AdvertiseExecuteSequence) ? "AdvtExecuteSequence" : sequence.ToString();
コード例 #13
0
ファイル: Table_GSUB.cs プロジェクト: bitforks/Font-Validator
            public SequenceTable GetSequenceTable(uint i)
            {
                SequenceTable st = null;

                if (i < SequenceCount)
                {
                    st = new SequenceTable(m_offsetMultipleSubst + GetSequenceOffset(i), m_bufTable);
                }

                return st;
            }
コード例 #14
0
ファイル: WixActionRow.cs プロジェクト: zooba/wix3
        /// <summary>
        /// Parses ActionRows from the Xml reader.
        /// </summary>
        /// <param name="reader">Xml reader that contains serialized ActionRows.</param>
        /// <returns>The parsed ActionRows.</returns>
        internal static WixActionRow[] Parse(XmlReader reader)
        {
            Debug.Assert("action" == reader.LocalName);

            string id = null;
            string condition = null;
            bool empty = reader.IsEmptyElement;
            int sequence = int.MinValue;
            int sequenceCount = 0;
            SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length];

            while (reader.MoveToNextAttribute())
            {
                switch (reader.Name)
                {
                    case "name":
                        id = reader.Value;
                        break;
                    case "AdminExecuteSequence":
                        if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                        {
                            sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence;
                            ++sequenceCount;
                        }
                        break;
                    case "AdminUISequence":
                        if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                        {
                            sequenceTables[sequenceCount] = SequenceTable.AdminUISequence;
                            ++sequenceCount;
                        }
                        break;
                    case "AdvtExecuteSequence":
                        if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                        {
                            sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence;
                            ++sequenceCount;
                        }
                        break;
                    case "condition":
                        condition = reader.Value;
                        break;
                    case "InstallExecuteSequence":
                        if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                        {
                            sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence;
                            ++sequenceCount;
                        }
                        break;
                    case "InstallUISequence":
                        if (Common.IsYes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                        {
                            sequenceTables[sequenceCount] = SequenceTable.InstallUISequence;
                            ++sequenceCount;
                        }
                        break;
                    case "sequence":
                        sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
                        break;
                    default:
                        if (!reader.NamespaceURI.StartsWith("http://www.w3.org/", StringComparison.Ordinal))
                        {
                            throw new WixException(WixErrors.UnexpectedAttribute(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.Name));
                        }
                        break;
                }
            }

            if (null == id)
            {
                throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "name"));
            }

            if (int.MinValue == sequence)
            {
                throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "sequence"));
            }
            else if (1 > sequence)
            {
                throw new WixException(WixErrors.IntegralValueOutOfRange(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "sequence", sequence, 1, int.MaxValue));
            }

            if (0 == sequenceCount)
            {
                throw new WixException(WixErrors.ExpectedAttributes(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", "AdminExecuteSequence", "AdminUISequence", "AdvtExecuteSequence", "InstallExecuteSequence", "InstallUISequence"));
            }

            if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent())
            {
                throw new WixException(WixErrors.UnexpectedContentNode(SourceLineNumberCollection.FromUri(reader.BaseURI), "action", reader.NodeType.ToString()));
            }

            // create the actions
            WixActionRow[] actionRows = new WixActionRow[sequenceCount];
            for (int i = 0; i < sequenceCount; i++)
            {
                WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
                actionRows[i] = actionRow;
            }

            return actionRows;
        }
コード例 #15
0
 /// <summary>
 /// Get an ActionRow by its sequence table and action name.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 public WixActionRow this[SequenceTable sequenceTable, string action]
 {
     get { return((WixActionRow)this.collection[GetKey(sequenceTable, action)]); }
 }
コード例 #16
0
ファイル: WixActionRow.cs プロジェクト: zooba/wix3
 /// <summary>
 /// Get all the actions scheduled before this one in a particular sequence table.
 /// </summary>
 /// <param name="sequenceTable">The sequence table.</param>
 /// <param name="allPreviousActionRows">A RowCollection which will contain all the previous actions.</param>
 internal void GetAllPreviousActionRows(SequenceTable sequenceTable, RowCollection allPreviousActionRows)
 {
     if (null != this.previousActionRows)
     {
         foreach (WixActionRow actionRow in this.previousActionRows)
         {
             if (sequenceTable == actionRow.SequenceTable)
             {
                 actionRow.GetAllPreviousActionRows(sequenceTable, allPreviousActionRows);
                 allPreviousActionRows.Add(actionRow);
                 actionRow.GetAllNextActionRows(sequenceTable, allPreviousActionRows);
             }
         }
     }
 }
コード例 #17
0
 /// <summary>
 /// Get an ActionRow by its sequence table and action name.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 public WixActionRow this[SequenceTable sequenceTable, string action]
 {
     get { return (WixActionRow)this.collection[GetKey(sequenceTable, action)]; }
 }
コード例 #18
0
 /// <summary>
 /// Remove an ActionRow from the collection.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 public void Remove(SequenceTable sequenceTable, string action)
 {
     this.collection.Remove(GetKey(sequenceTable, action));
 }
コード例 #19
0
ファイル: ParseHelper.cs プロジェクト: BMurri/Core
        public WixActionSymbol ScheduleActionSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, AccessModifier access, SequenceTable sequence, string actionName, string condition, string beforeAction, string afterAction, bool overridable = false)
        {
            var actionId = new Identifier(access, sequence, actionName);

            var actionSymbol = section.AddSymbol(new WixActionSymbol(sourceLineNumbers, actionId)
            {
                SequenceTable = sequence,
                Action        = actionName,
                Condition     = condition,
                Before        = beforeAction,
                After         = afterAction,
                Overridable   = overridable,
            });

            if (null != beforeAction)
            {
                if (WindowsInstallerStandard.IsStandardAction(beforeAction))
                {
                    this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), beforeAction);
                }
                else
                {
                    this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, beforeAction);
                }
            }

            if (null != afterAction)
            {
                if (WindowsInstallerStandard.IsStandardAction(afterAction))
                {
                    this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), afterAction);
                }
                else
                {
                    this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, afterAction);
                }
            }

            return(actionSymbol);
        }
コード例 #20
0
ファイル: Binder.cs プロジェクト: zooba/wix3
        /// <summary>
        /// Adds the PatchFiles action to the sequence table if it does not already exist.
        /// </summary>
        /// <param name="table">The sequence table to check or modify.</param>
        /// <param name="mainTransform">The primary authoring transform.</param>
        /// <param name="pairedTransform">The secondary patch transform.</param>
        /// <param name="mainFileRow">The file row that contains information about the patched file.</param>
        private void AddPatchFilesActionToSequenceTable(SequenceTable table, Output mainTransform, Output pairedTransform, Row mainFileRow)
        {
            // Find/add PatchFiles action (also determine sequence for it).
            // Search mainTransform first, then pairedTransform (pairedTransform overrides).
            bool hasPatchFilesAction = false;
            int seqInstallFiles = 0;
            int seqDuplicateFiles = 0;
            string tableName = table.ToString();

            TestSequenceTableForPatchFilesAction(
                    mainTransform.Tables[tableName],
                    ref hasPatchFilesAction,
                    ref seqInstallFiles,
                    ref seqDuplicateFiles);
            TestSequenceTableForPatchFilesAction(
                    pairedTransform.Tables[tableName],
                    ref hasPatchFilesAction,
                    ref seqInstallFiles,
                    ref seqDuplicateFiles);
            if (!hasPatchFilesAction)
            {
                Table iesTable = pairedTransform.EnsureTable(this.core.TableDefinitions[tableName]);
                if (0 == iesTable.Rows.Count)
                {
                    iesTable.Operation = TableOperation.Add;
                }
                Row patchAction = iesTable.CreateRow(null);
                WixActionRow wixPatchAction = Installer.GetStandardActions()[table, "PatchFiles"];
                int sequence = wixPatchAction.Sequence;
                // Test for default sequence value's appropriateness
                if (seqInstallFiles >= sequence || (0 != seqDuplicateFiles && seqDuplicateFiles <= sequence))
                {
                    if (0 != seqDuplicateFiles)
                    {
                        if (seqDuplicateFiles < seqInstallFiles)
                        {
                            throw new WixException(WixErrors.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action));
                        }
                        else
                        {
                            sequence = (seqDuplicateFiles + seqInstallFiles) / 2;
                            if (seqInstallFiles == sequence || seqDuplicateFiles == sequence)
                            {
                                throw new WixException(WixErrors.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, iesTable.Name, "InstallFiles", "DuplicateFiles", wixPatchAction.Action));
                            }
                        }
                    }
                    else
                    {
                        sequence = seqInstallFiles + 1;
                    }
                }
                patchAction[0] = wixPatchAction.Action;
                patchAction[1] = wixPatchAction.Condition;
                patchAction[2] = sequence;
                patchAction.Operation = RowOperation.Add;
            }
        }
コード例 #21
0
 /// <summary>
 /// Determines if the collection contains an ActionRow with a specific sequence table and name.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 /// <returns>true if the ActionRow was found; false otherwise.</returns>
 public bool Contains(SequenceTable sequenceTable, string action)
 {
     return this.collection.Contains(GetKey(sequenceTable, action));
 }
コード例 #22
0
        /// <summary>
        /// Parses ActionRows from the Xml reader.
        /// </summary>
        /// <param name="reader">Xml reader that contains serialized ActionRows.</param>
        /// <returns>The parsed ActionRows.</returns>
        internal static WixActionRow[] ParseActions(XmlReader reader)
        {
            Debug.Assert("action" == reader.LocalName);

            string id            = null;
            string condition     = null;
            bool   empty         = reader.IsEmptyElement;
            int    sequence      = int.MinValue;
            int    sequenceCount = 0;

            SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length];

            while (reader.MoveToNextAttribute())
            {
                switch (reader.Name)
                {
                case "name":
                    id = reader.Value;
                    break;

                case "AdminExecuteSequence":
                    if (reader.Value.Equals("yes"))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence;
                        ++sequenceCount;
                    }
                    break;

                case "AdminUISequence":
                    if (reader.Value.Equals("yes"))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.AdminUISequence;
                        ++sequenceCount;
                    }
                    break;

                case "AdvtExecuteSequence":
                    if (reader.Value.Equals("yes"))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence;
                        ++sequenceCount;
                    }
                    break;

                case "condition":
                    condition = reader.Value;
                    break;

                case "InstallExecuteSequence":
                    if (reader.Value.Equals("yes"))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence;
                        ++sequenceCount;
                    }
                    break;

                case "InstallUISequence":
                    if (reader.Value.Equals("yes"))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.InstallUISequence;
                        ++sequenceCount;
                    }
                    break;

                case "sequence":
                    sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
                    break;
                }
            }

            if (null == id)
            {
                throw new XmlException();
            }

            if (int.MinValue == sequence)
            {
                throw new XmlException();
            }
            else if (1 > sequence)
            {
                throw new XmlException();
            }

            if (0 == sequenceCount)
            {
                throw new XmlException();
            }

            if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent())
            {
                throw new XmlException();
            }

            // create the actions
            WixActionRow[] actionRows = new WixActionRow[sequenceCount];
            for (int i = 0; i < sequenceCount; i++)
            {
                //WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
                //actionRows[i] = actionRow;
                throw new NotImplementedException();
            }

            return(actionRows);
        }
コード例 #23
0
 /// <summary>
 /// Get the key for storing an ActionRow.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 /// <returns>The string key.</returns>
 private static string GetKey(SequenceTable sequenceTable, string action)
 {
     return GetKey(sequenceTable.ToString(), action);
 }
コード例 #24
0
 /// <summary>
 /// Determines if the collection contains an ActionRow with a specific sequence table and name.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 /// <returns>true if the ActionRow was found; false otherwise.</returns>
 public bool Contains(SequenceTable sequenceTable, string action)
 {
     return(this.collection.Contains(GetKey(sequenceTable, action)));
 }
コード例 #25
0
        /// <summary>
        /// Parses ActionRows from the Xml reader.
        /// </summary>
        /// <param name="reader">Xml reader that contains serialized ActionRows.</param>
        /// <returns>The parsed ActionRows.</returns>
        internal static WixActionRow[] Parse(XmlReader reader)
        {
            Debug.Assert("action" == reader.LocalName);

            string id            = null;
            string condition     = null;
            bool   empty         = reader.IsEmptyElement;
            int    sequence      = int.MinValue;
            int    sequenceCount = 0;

            SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length];

            while (reader.MoveToNextAttribute())
            {
                switch (reader.Name)
                {
                case "name":
                    id = reader.Value;
                    break;

                case "AdminExecuteSequence":
                    if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence;
                        ++sequenceCount;
                    }
                    break;

                case "AdminUISequence":
                    if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.AdminUISequence;
                        ++sequenceCount;
                    }
                    break;

                case "AdvtExecuteSequence":
                    if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence;
                        ++sequenceCount;
                    }
                    break;

                case "condition":
                    condition = reader.Value;
                    break;

                case "InstallExecuteSequence":
                    if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence;
                        ++sequenceCount;
                    }
                    break;

                case "InstallUISequence":
                    if (Common.IsYes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name, reader.Value))
                    {
                        sequenceTables[sequenceCount] = SequenceTable.InstallUISequence;
                        ++sequenceCount;
                    }
                    break;

                case "sequence":
                    sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
                    break;

                default:
                    if (!reader.NamespaceURI.StartsWith("http://www.w3.org/", StringComparison.Ordinal))
                    {
                        throw new WixException(WixErrors.UnexpectedAttribute(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.Name));
                    }
                    break;
                }
            }

            if (null == id)
            {
                throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "name"));
            }

            if (int.MinValue == sequence)
            {
                throw new WixException(WixErrors.ExpectedAttribute(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "sequence"));
            }
            else if (1 > sequence)
            {
                throw new WixException(WixErrors.IntegralValueOutOfRange(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "sequence", sequence, 1, int.MaxValue));
            }

            if (0 == sequenceCount)
            {
                throw new WixException(WixErrors.ExpectedAttributes(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", "AdminExecuteSequence", "AdminUISequence", "AdvtExecuteSequence", "InstallExecuteSequence", "InstallUISequence"));
            }

            if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent())
            {
                throw new WixException(WixErrors.UnexpectedContentNode(SourceLineNumber.CreateFromUri(reader.BaseURI), "action", reader.NodeType.ToString()));
            }

            // create the actions
            WixActionRow[] actionRows = new WixActionRow[sequenceCount];
            for (int i = 0; i < sequenceCount; i++)
            {
                WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
                actionRows[i] = actionRow;
            }

            return(actionRows);
        }
コード例 #26
0
 /// <summary>
 /// Remove an ActionRow from the collection.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 public void Remove(SequenceTable sequenceTable, string action)
 {
     this.collection.Remove(GetKey(sequenceTable, action));
 }
コード例 #27
0
 /// <summary>
 /// Get the key for storing an ActionRow.
 /// </summary>
 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
 /// <param name="action">The action name of the ActionRow.</param>
 /// <returns>The string key.</returns>
 private static string GetKey(SequenceTable sequenceTable, string action)
 {
     return(GetKey(sequenceTable.ToString(), action));
 }
コード例 #28
0
ファイル: TableSequence.cs プロジェクト: boba761/Amos_config
        /// <summary>
        /// Статический метод для создания экземпляров класса на основе данных импорта
        /// </summary>
        /// <param name="table">Объект содержащий данные импорта</param>
        /// <returns>Объект таблицы</returns>
        public static TableSequence CreateInstance(SequenceTable table)
        {
            TableSequence objectTable;

            switch (table.typeOfTable)
            {
            case 0x00000001:
                objectTable = new DelayTableSequence( );
                break;

            case 0x0000000D:
                objectTable = new LoopTableSequence( );
                break;

            case 0x00004154:
            case 0x00004132:
                objectTable = new AttenuationTableSequence( );
                break;

            case 0x00004143:
                objectTable = new AcquisitionTableSequence( );
                break;

            case 0x00004741:
                objectTable = new RotationAngleTableSequence( );
                break;

            case 0x00004752:
            case 0x00004732:
                objectTable = new GradientAmplitudeTableSequence( );
                break;

            case 0x00004F31:
                objectTable = new FrequencyTableSequence( );
                break;

            case 0x0000524D:
            case 0x00005232:
                objectTable = new ModulationTableSequence( );
                break;

            case 0x00005048:
            case 0x00005032:
            case 0x00005053:
                objectTable = new PhaseTableSequence( );
                break;

            case 0x00005348:
                objectTable = new GradientWaveformTableSequence( );
                break;

            default:
                objectTable = new TableSequence( );
                break;
            }

            objectTable.Name           = table.name;
            objectTable.TypeTable      = objectTable.GetTypeTable(table.dimension);
            objectTable.Data           = new DataTable( );
            objectTable.Data.Auto      = table.isAuto;
            objectTable.Data.Steps     = table.stepsPer360Cycle.ToString();
            objectTable.Data.TimePoint = table.timePoint;
            objectTable.Text           = table.entry;
            if (objectTable._delayAuto != null)
            {
                objectTable._delayAuto.UseDwellTime = table.useIncrementList;
                objectTable._delayAuto.Increment    = table.incrementValue;
                objectTable._delayAuto.Every        = table.incrementOperation == "+ Add" ? 0 : 1;
                objectTable._delayAuto.Add          = table.incrementOperation == "Every pass" ? 0 : 1;
                objectTable._delayAuto.Table        = objectTable;
            }
            if (objectTable._generateAuto != null)
            {
                objectTable._generateAuto.Start     = table.start;
                objectTable._generateAuto.Increment = table.increment;
                objectTable._generateAuto.Number    = table.number;
                objectTable._generateAuto.Table     = objectTable;
            }
            return(objectTable);
        }