private static IList <SoftwareTag> CollectPackageTags(Output bundle) { List <SoftwareTag> tags = new List <SoftwareTag>(); Table packageTable = bundle.Tables["ChainPackageInfo"]; if (null != packageTable) { Table payloadTable = bundle.Tables["PayloadInfo"]; RowDictionary <PayloadInfoRow> payloads = new RowDictionary <PayloadInfoRow>(payloadTable); foreach (Row row in packageTable.Rows) { Compiler.ChainPackageType packageType = (Compiler.ChainPackageType)Enum.Parse(typeof(Compiler.ChainPackageType), (string)row[1], true); if (Compiler.ChainPackageType.Msi == packageType) { string packagePayloadId = (string)row[2]; PayloadInfoRow payload = (PayloadInfoRow)payloads[packagePayloadId]; using (Database db = new Database(payload.FullFileName)) { if (db.Tables.Contains("SoftwareIdentificationTag")) { using (View view = db.OpenView("SELECT `Regid`, `UniqueId`, `Type` FROM `SoftwareIdentificationTag`")) { view.Execute(); while (true) { using (Record record = view.Fetch()) { if (null == record) { break; } TagType type = String.IsNullOrEmpty(record.GetString(3)) ? TagType.Unknown : (TagType)Enum.Parse(typeof(TagType), record.GetString(3)); tags.Add(new SoftwareTag() { Regid = record.GetString(1), Id = record.GetString(2), Type = type }); } } } } } } } } return(tags); }
/// <summary> /// Harvest a payload. /// </summary> /// <param name="path">The path of the payload.</param> /// <returns>A harvested payload.</returns> public Wix.RemotePayload HarvestRemotePayload(string path) { if (null == path) { throw new ArgumentNullException("path"); } if (!File.Exists(path)) { throw new WixException(UtilErrors.FileNotFound(path)); } PayloadInfo payloadInfo = new PayloadInfo() { SourceFile = Path.GetFullPath(path), SuppressSignatureValidation = false // assume signed, if its unsigned it won't get the certificate properties }; PayloadInfoRow.ResolvePayloadInfo(payloadInfo); return(payloadInfo); }