public virtual void ResolvePatch(FileRow fileRow, out bool retainRangeWarning) { if (fileRow == null) { throw new ArgumentNullException("fileRow"); } retainRangeWarning = false; if (this.deltaBinaryPatch && RowOperation.Modify == fileRow.Operation) { if (0 != (PatchAttributeType.IncludeWholeFile | fileRow.PatchAttributes)) { string deltaBase = Common.GenerateIdentifier("dlt", true, Common.GenerateGuid()); string deltaFile = Path.Combine(this.tempFilesLocation, String.Concat(deltaBase, ".dpf")); string headerFile = Path.Combine(this.tempFilesLocation, String.Concat(deltaBase, ".phd")); PatchAPI.PatchInterop.PatchSymbolFlagsType apiPatchingSymbolFlags = 0; bool optimizePatchSizeForLargeFiles = false; Table wixPatchIdTable = this.output.Tables["WixPatchId"]; if (null != wixPatchIdTable) { Row row = wixPatchIdTable.Rows[0]; if (null != row) { if (null != row[2]) { optimizePatchSizeForLargeFiles = (1 == Convert.ToUInt32(row[2], CultureInfo.InvariantCulture)); } if (null != row[3]) { apiPatchingSymbolFlags = (PatchAPI.PatchInterop.PatchSymbolFlagsType)Convert.ToUInt32(row[3], CultureInfo.InvariantCulture); } } } if (PatchAPI.PatchInterop.CreateDelta( deltaFile, fileRow.Source, fileRow.Symbols, fileRow.RetainOffsets, fileRow.PreviousSourceArray, fileRow.PreviousSymbolsArray, fileRow.PreviousIgnoreLengthsArray, fileRow.PreviousIgnoreOffsetsArray, fileRow.PreviousRetainLengthsArray, fileRow.PreviousRetainOffsetsArray, apiPatchingSymbolFlags, optimizePatchSizeForLargeFiles, out retainRangeWarning)) { PatchAPI.PatchInterop.ExtractDeltaHeader(deltaFile, headerFile); fileRow.Patch = headerFile; fileRow.Source = deltaFile; } } } }