From 71c52d5af2293d3eb79882ce36b0411f81185c11 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 29 Nov 2017 22:03:26 -0800 Subject: Fix source path and cabinet processing --- .../Bind/BindDatabaseCommand.cs | 7 +-- .../Bind/CabinetBuilder.cs | 32 +++++++----- .../Bind/CabinetResolver.cs | 60 ++++++++++------------ .../Bind/CreateCabinetsCommand.cs | 12 ++--- .../Bind/CreateOutputFromIRCommand.cs | 42 ++++++++++++++- .../Bind/ExtractMergeModuleFilesCommand.cs | 27 +++++----- .../Bind/ProcessUncompressedFilesCommand.cs | 2 +- .../Bind/UpdateFileFacadesCommand.cs | 20 ++++---- .../Unbind/ExtractCabinetsCommand.cs | 22 ++++---- 9 files changed, 131 insertions(+), 93 deletions(-) (limited to 'src/WixToolset.Core.WindowsInstaller') diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs index 30a19a4b..012998e6 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs @@ -123,7 +123,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind { propertyRow.Value = Common.GenerateGuid(); -#if TODO_FIX_INSTANCE_TRANSFORM +#if TODO_FIX_INSTANCE_TRANSFORM // Is this still necessary? + // Update the target ProductCode in any instance transforms. foreach (SubStorage subStorage in this.Output.SubStorages) { @@ -391,7 +392,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind command.ResolveMedia = this.ResolveMedia; command.TableDefinitions = this.TableDefinitions; command.TempFilesLocation = this.IntermediateFolder; - command.WixMediaTable = output.Tables["WixMedia"]; + command.WixMediaTuples = section.Tuples.OfType(); command.Execute(); fileTransfers.AddRange(command.FileTransfers); @@ -526,7 +527,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind } this.FileTransfers = fileTransfers; - this.ContentFilePaths = fileFacades.Select(r => r.WixFile.Source).ToList(); + this.ContentFilePaths = fileFacades.Select(r => r.WixFile.Source.Path).ToList(); // TODO: Eventually this gets removed var intermediate = new Intermediate(this.Intermediate.Id, new[] { section }, this.Intermediate.Localizations.ToDictionary(l => l.Culture, StringComparer.OrdinalIgnoreCase), this.Intermediate.EmbedFilePaths); diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs index c25a497e..2cbcc8e1 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs @@ -4,11 +4,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind { using System; using System.Collections; + using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using WixToolset.Core.Bind; - using WixToolset.Core.Cab; + using WixToolset.Core.Native; using WixToolset.Data; /// @@ -137,7 +138,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind int maxCabinetSize = 0; // The value of 0 corresponds to default of 2GB which means no cabinet splitting ulong maxPreCompressedSizeInBytes = 0; - if (MaximumCabinetSizeForLargeFileSplitting != 0) + if (this.MaximumCabinetSizeForLargeFileSplitting != 0) { // User Specified Max Cab Size for File Splitting, So Check if this cabinet has a single file larger than MaximumUncompressedFileSize // If a file is larger than MaximumUncompressedFileSize, then the cabinet containing it will have only this file @@ -152,26 +153,33 @@ namespace WixToolset.Core.WindowsInstaller.Bind if ((ulong)facade.File.FileSize >= maxPreCompressedSizeInBytes) { // If file is larger than MaximumUncompressedFileSize set Maximum Cabinet Size for Cabinet Splitting - maxCabinetSize = MaximumCabinetSizeForLargeFileSplitting; + maxCabinetSize = this.MaximumCabinetSizeForLargeFileSplitting; } } } } // create the cabinet file + var cabinetPath = Path.GetFullPath(cabinetWorkItem.CabinetFile); string cabinetFileName = Path.GetFileName(cabinetWorkItem.CabinetFile); string cabinetDirectory = Path.GetDirectoryName(cabinetWorkItem.CabinetFile); - using (WixCreateCab cab = new WixCreateCab(cabinetFileName, cabinetDirectory, cabinetWorkItem.FileFacades.Count(), maxCabinetSize, cabinetWorkItem.MaxThreshold, cabinetWorkItem.CompressionLevel)) - { - foreach (FileFacade facade in cabinetWorkItem.FileFacades) - { - cab.AddFile(facade); - } + //using (WixCreateCab cab = new WixCreateCab(cabinetFileName, cabinetDirectory, cabinetWorkItem.FileFacades.Count(), maxCabinetSize, cabinetWorkItem.MaxThreshold, cabinetWorkItem.CompressionLevel)) + //{ + // foreach (FileFacade facade in cabinetWorkItem.FileFacades) + // { + // cab.AddFile(facade); + // } - cab.Complete(newCabNamesCallBackAddress); - } + // cab.Complete(newCabNamesCallBackAddress); + //} + + var files = cabinetWorkItem.FileFacades.Select(facade => new CabinetCompressFile(facade.WixFile.Source.Path, facade.File.File, facade.Hash.HashPart1, facade.Hash.HashPart2, facade.Hash.HashPart3, facade.Hash.HashPart4)).ToList(); + + var cabinetCompressionLevel = (CabinetCompressionLevel)cabinetWorkItem.CompressionLevel; + + var cab = new Cabinet(cabinetPath); + cab.Compress(files, cabinetCompressionLevel, maxCabinetSize, cabinetWorkItem.MaxThreshold); } } } - diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs index df1ccecf..370d4b9c 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetResolver.cs @@ -6,8 +6,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind using System.Collections.Generic; using System.IO; using System.Linq; - using WixToolset.Core.Cab; using WixToolset.Core.Bind; + using WixToolset.Core.Native; using WixToolset.Data; using WixToolset.Extensibility; @@ -26,7 +26,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind public ResolvedCabinet ResolveCabinet(string cabinetPath, IEnumerable fileFacades) { - var filesWithPath = fileFacades.Select(f => new BindFileWithPath() { Id = f.File.File, Path = f.WixFile.Source }).ToList(); + var filesWithPath = fileFacades.Select(f => new BindFileWithPath() { Id = f.File.File, Path = f.WixFile.Source.Path }).ToList(); ResolvedCabinet resolved = null; @@ -58,45 +58,39 @@ namespace WixToolset.Core.WindowsInstaller.Bind // 3. modified time changed bool cabinetValid = true; - // Need to force garbage collection of WixEnumerateCab to ensure the handle - // associated with it is closed before it is reused. - using (var wixEnumerateCab = new WixEnumerateCab()) - { - List fileList = wixEnumerateCab.Enumerate(resolved.Path); + var cabinet = new Cabinet(resolved.Path); + List fileList = cabinet.Enumerate(); - if (filesWithPath.Count() != fileList.Count) - { - cabinetValid = false; - } - else + if (filesWithPath.Count() != fileList.Count) + { + cabinetValid = false; + } + else + { + int i = 0; + foreach (BindFileWithPath file in filesWithPath) { - int i = 0; - foreach (BindFileWithPath file in filesWithPath) + // First check that the file identifiers match because that is quick and easy. + CabinetFileInfo cabFileInfo = fileList[i]; + cabinetValid = (cabFileInfo.FileId == file.Id); + if (cabinetValid) { - // First check that the file identifiers match because that is quick and easy. - CabinetFileInfo cabFileInfo = fileList[i]; - cabinetValid = (cabFileInfo.FileId == file.Id); + // Still valid so ensure the file sizes are the same. + FileInfo fileInfo = new FileInfo(file.Path); + cabinetValid = (cabFileInfo.Size == fileInfo.Length); if (cabinetValid) { - // Still valid so ensure the file sizes are the same. - FileInfo fileInfo = new FileInfo(file.Path); - cabinetValid = (cabFileInfo.Size == fileInfo.Length); - if (cabinetValid) - { - // Still valid so ensure the source time stamp hasn't changed. Thus we need - // to convert the source file time stamp into a cabinet compatible data/time. - Native.CabInterop.DateTimeToCabDateAndTime(fileInfo.LastWriteTime, out var sourceCabDate, out var sourceCabTime); - cabinetValid = (cabFileInfo.Date == sourceCabDate && cabFileInfo.Time == sourceCabTime); - } - } - - if (!cabinetValid) - { - break; + // Still valid so ensure the source time stamp hasn't changed. + cabinetValid = cabFileInfo.SameAsDateTime(fileInfo.LastWriteTime); } + } - i++; + if (!cabinetValid) + { + break; } + + i++; } } diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs index b5a436c5..a449397d 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs @@ -66,7 +66,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind public TableDefinitionCollection TableDefinitions { private get; set; } - public Table WixMediaTable { private get; set; } + public IEnumerable WixMediaTuples { private get; set; } public IEnumerable FileTransfers => this.fileTransfers; @@ -77,7 +77,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind /// The uncompressed file rows. public void Execute() { - var wixMediaRows = new RowDictionary(this.WixMediaTable); + var wixMediaTuples = this.WixMediaTuples.ToDictionary(t => t.DiskId_); this.lastCabinetAddedToMediaTable = new Dictionary(); @@ -93,13 +93,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind foreach (var entry in this.FileRowsByCabinet) { - var mediaRow = entry.Key; + var mediaTuple = entry.Key; IEnumerable files = entry.Value; CompressionLevel compressionLevel = this.DefaultCompressionLevel; string mediaLayoutFolder = null; - if (wixMediaRows.TryGetValue(mediaRow.Id.Id, out var wixMediaRow)) + if (wixMediaTuples.TryGetValue(mediaTuple.DiskId, out var wixMediaRow)) { mediaLayoutFolder = wixMediaRow.Layout; @@ -109,9 +109,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind } } - string cabinetDir = this.ResolveMedia(mediaRow, mediaLayoutFolder, this.LayoutDirectory); + string cabinetDir = this.ResolveMedia(mediaTuple, mediaLayoutFolder, this.LayoutDirectory); - CabinetWorkItem cabinetWorkItem = this.CreateCabinetWorkItem(this.Output, cabinetDir, mediaRow, compressionLevel, files, this.fileTransfers); + CabinetWorkItem cabinetWorkItem = this.CreateCabinetWorkItem(this.Output, cabinetDir, mediaTuple, compressionLevel, files, this.fileTransfers); if (null != cabinetWorkItem) { cabinetBuilder.Enqueue(cabinetWorkItem); diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs index 85b3b25a..a19a53f1 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs @@ -44,9 +44,21 @@ namespace WixToolset.Core.WindowsInstaller.Bind this.AddFileTuple((FileTuple)tuple, output); break; + case TupleDefinitionType.Media: + this.AddMediaTuple((MediaTuple)tuple, output); + break; + + case TupleDefinitionType.Property: + this.AddPropertyTuple((PropertyTuple)tuple, output); + break; + case TupleDefinitionType.WixAction: this.AddWixActionTuple((WixActionTuple)tuple, output); - break; + break; + + case TupleDefinitionType.WixMedia: + // Ignored. + break; default: this.AddTupleDefaultly(tuple, output); @@ -76,6 +88,34 @@ namespace WixToolset.Core.WindowsInstaller.Bind row.Attributes = attributes; } + private void AddMediaTuple(MediaTuple tuple, Output output) + { + if (this.Section.Type != SectionType.Module) + { + var table = output.EnsureTable(this.TableDefinitions["Media"]); + var row = (MediaRow)table.CreateRow(tuple.SourceLineNumbers); + row.DiskId = tuple.DiskId; + row.LastSequence = tuple.LastSequence; + row.DiskPrompt = tuple.DiskPrompt; + row.Cabinet = tuple.Cabinet; + row.VolumeLabel = tuple.VolumeLabel; + row.Source = tuple.Source; + } + } + + private void AddPropertyTuple(PropertyTuple tuple, Output output) + { + if (String.IsNullOrEmpty(tuple.Value)) + { + return; + } + + var table = output.EnsureTable(this.TableDefinitions["Property"]); + var row = (PropertyRow)table.CreateRow(tuple.SourceLineNumbers); + row.Property = tuple.Property; + row.Value = tuple.Value; + } + private void AddWixActionTuple(WixActionTuple actionRow, Output output) { // Get the table definition for the action (and ensure the proper table exists for a module). diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs index 32d1cfda..a31c8079 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs @@ -14,7 +14,6 @@ namespace WixToolset.Core.WindowsInstaller.Bind using WixToolset.Msi; using WixToolset.Core.Native; using WixToolset.Core.Bind; - using WixToolset.Core.Cab; using WixToolset.Data.Tuples; /// @@ -110,7 +109,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind wixFileRow.Directory_ = record[2]; wixFileRow.DiskId = wixMergeRow.DiskId; wixFileRow.PatchGroup = -1; - wixFileRow.Source = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]); + wixFileRow.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) }; //WixFileRow wixFileRow = (WixFileRow)this.WixFileTable.CreateRow(wixMergeRow.SourceLineNumbers, false); //wixFileRow.Directory = record[2]; //wixFileRow.DiskId = wixMergeRow.DiskId; @@ -204,20 +203,18 @@ namespace WixToolset.Core.WindowsInstaller.Bind string mergeIdPath = Path.Combine(this.IntermediateFolder, mergeId); Directory.CreateDirectory(mergeIdPath); - using (var extractCab = new WixExtractCab()) + try { - try - { - extractCab.Extract(moduleCabPath, mergeIdPath); - } - catch (FileNotFoundException) - { - throw new WixException(WixErrors.CabFileDoesNotExist(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath)); - } - catch - { - throw new WixException(WixErrors.CabExtractionFailed(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath)); - } + var cabinet = new Cabinet(moduleCabPath); + cabinet.Extract(mergeIdPath); + } + catch (FileNotFoundException) + { + throw new WixException(WixErrors.CabFileDoesNotExist(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath)); + } + catch + { + throw new WixException(WixErrors.CabExtractionFailed(moduleCabPath, wixMergeRow.SourceFile, mergeIdPath)); } } catch (COMException ce) diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs index d71724d1..aa4382f5 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs @@ -105,7 +105,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind // finally put together the base media layout path and the relative file layout path string fileLayoutPath = Path.Combine(mediaLayoutDirectory, relativeFileLayoutPath); - if (FileTransfer.TryCreate(facade.WixFile.Source, fileLayoutPath, false, "File", facade.File.SourceLineNumbers, out var transfer)) + if (FileTransfer.TryCreate(facade.WixFile.Source.Path, fileLayoutPath, false, "File", facade.File.SourceLineNumbers, out var transfer)) { fileTransfers.Add(transfer); } diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs index 030bc4cc..a9eb2a8f 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs @@ -57,27 +57,27 @@ namespace WixToolset.Core.WindowsInstaller.Bind FileInfo fileInfo = null; try { - fileInfo = new FileInfo(file.WixFile.Source); + fileInfo = new FileInfo(file.WixFile.Source.Path); } catch (ArgumentException) { - Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source)); + Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path)); return; } catch (PathTooLongException) { - Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source)); + Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path)); return; } catch (NotSupportedException) { - Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source)); + Messaging.Instance.OnMessage(WixDataErrors.InvalidFileName(file.File.SourceLineNumbers, file.WixFile.Source.Path)); return; } if (!fileInfo.Exists) { - Messaging.Instance.OnMessage(WixErrors.CannotFindFile(file.File.SourceLineNumbers, file.File.File, file.File.LongFileName, file.WixFile.Source)); + Messaging.Instance.OnMessage(WixErrors.CannotFindFile(file.File.SourceLineNumbers, file.File.File, file.File.LongFileName, file.WixFile.Source.Path)); return; } @@ -85,7 +85,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind { if (Int32.MaxValue < fileStream.Length) { - throw new WixException(WixErrors.FileTooLarge(file.File.SourceLineNumbers, file.WixFile.Source)); + throw new WixException(WixErrors.FileTooLarge(file.File.SourceLineNumbers, file.WixFile.Source.Path)); } file.File.FileSize = Convert.ToInt32(fileStream.Length, CultureInfo.InvariantCulture); @@ -372,7 +372,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind // Navigator is cheaper than dom. Perhaps there is a cheaper API still. try { - XPathDocument doc = new XPathDocument(fileManifest.WixFile.Source); + XPathDocument doc = new XPathDocument(fileManifest.WixFile.Source.Path); XPathNavigator nav = doc.CreateNavigator(); nav.MoveToRoot(); @@ -396,7 +396,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind } if (!hasNextSibling) { - Messaging.Instance.OnMessage(WixErrors.InvalidManifestContent(file.File.SourceLineNumbers, fileManifest.WixFile.Source)); + Messaging.Instance.OnMessage(WixErrors.InvalidManifestContent(file.File.SourceLineNumbers, fileManifest.WixFile.Source.Path)); return; } @@ -434,11 +434,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind } catch (FileNotFoundException fe) { - Messaging.Instance.OnMessage(WixErrors.FileNotFound(new SourceLineNumber(fileManifest.WixFile.Source), fe.FileName, "AssemblyManifest")); + Messaging.Instance.OnMessage(WixErrors.FileNotFound(new SourceLineNumber(fileManifest.WixFile.Source.Path), fe.FileName, "AssemblyManifest")); } catch (XmlException xe) { - Messaging.Instance.OnMessage(WixErrors.InvalidXml(new SourceLineNumber(fileManifest.WixFile.Source), "manifest", xe.Message)); + Messaging.Instance.OnMessage(WixErrors.InvalidXml(new SourceLineNumber(fileManifest.WixFile.Source.Path), "manifest", xe.Message)); } if (!String.IsNullOrEmpty(win32Name)) diff --git a/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs index 229e75b4..7985c120 100644 --- a/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs @@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind using System.Collections.Specialized; using System.Globalization; using System.IO; - using WixToolset.Core.Cab; + using WixToolset.Core.Native; using WixToolset.Data; using WixToolset.Data.Rows; using WixToolset.Msi; @@ -88,9 +88,9 @@ namespace WixToolset.Core.WindowsInstaller.Unbind string cabinetFile = Path.Combine(this.IntermediateFolder, String.Concat("Media", Path.DirectorySeparatorChar, diskId.ToString(CultureInfo.InvariantCulture), ".cab")); // ensure the parent directory exists - System.IO.Directory.CreateDirectory(Path.GetDirectoryName(cabinetFile)); + Directory.CreateDirectory(Path.GetDirectoryName(cabinetFile)); - using (FileStream fs = System.IO.File.Create(cabinetFile)) + using (FileStream fs = File.Create(cabinetFile)) { int bytesRead; byte[] buffer = new byte[512]; @@ -128,16 +128,14 @@ namespace WixToolset.Core.WindowsInstaller.Unbind foreach (string cabinetFile in cabinetFiles) { - using (var extractCab = new WixExtractCab()) + try { - try - { - extractCab.Extract(cabinetFile, fileDirectory); - } - catch (FileNotFoundException) - { - throw new WixException(WixErrors.FileNotFound(new SourceLineNumber(this.InputFilePath), cabinetFile)); - } + var cabinet = new Cabinet(cabinetFile); + cabinet.Extract(fileDirectory); + } + catch (FileNotFoundException) + { + throw new WixException(WixErrors.FileNotFound(new SourceLineNumber(this.InputFilePath), cabinetFile)); } } } -- cgit v1.2.3-55-g6feb