public void PopulatesInstallExecuteSequenceTable() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Upgrade", "DetectOnly.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "InstallExecuteSequence" }); WixAssert.CompareLineByLine(new[] { "InstallExecuteSequence:CostFinalize\t\t1000", "InstallExecuteSequence:CostInitialize\t\t800", "InstallExecuteSequence:CreateFolders\t\t3700", "InstallExecuteSequence:FileCost\t\t900", "InstallExecuteSequence:FindRelatedProducts\t\t25", "InstallExecuteSequence:InstallFiles\t\t4000", "InstallExecuteSequence:InstallFinalize\t\t6600", "InstallExecuteSequence:InstallInitialize\t\t1500", "InstallExecuteSequence:InstallValidate\t\t1400", "InstallExecuteSequence:LaunchConditions\t\t100", "InstallExecuteSequence:MigrateFeatureStates\t\t1200", "InstallExecuteSequence:ProcessComponents\t\t1600", "InstallExecuteSequence:PublishFeatures\t\t6300", "InstallExecuteSequence:PublishProduct\t\t6400", "InstallExecuteSequence:RegisterProduct\t\t6100", "InstallExecuteSequence:RegisterUser\t\t6000", "InstallExecuteSequence:RemoveExistingProducts\t\t1401", "InstallExecuteSequence:RemoveFiles\t\t3500", "InstallExecuteSequence:RemoveFolders\t\t3600", "InstallExecuteSequence:UnpublishFeatures\t\t1800", "InstallExecuteSequence:ValidateProductID\t\t700", }, results); } }
public void CanBuildWithDefaultProductLanguage() { var folder = TestData.Get(@"TestData", "Language"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), "-loc", Path.Combine(folder, "Package.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", Path.Combine(baseFolder, "obj"), "-o", Path.Combine(baseFolder, @"bin\test.msi") }); result.AssertSuccess(); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var directorySymbols = section.Symbols.OfType <DirectorySymbol>(); WixAssert.CompareLineByLine(new[] { "INSTALLFOLDER:Example Corporation\\MsiPackage", "ProgramFilesFolder:PFiles", "TARGETDIR:SourceDir" }, directorySymbols.OrderBy(s => s.Id.Id).Select(s => s.Id.Id + ":" + s.Name).ToArray()); var propertySymbol = section.Symbols.OfType <PropertySymbol>().Single(p => p.Id.Id == "ProductLanguage"); Assert.Equal("0", propertySymbol.Value); var summaryPlatform = section.Symbols.OfType <SummaryInformationSymbol>().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); Assert.Equal("Intel;0", summaryPlatform.Value); var summaryCodepage = section.Symbols.OfType <SummaryInformationSymbol>().Single(s => s.PropertyId == SummaryInformationType.Codepage); Assert.Equal("1252", summaryCodepage.Value); var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var directoryRows = data.Tables["Directory"].Rows; WixAssert.CompareLineByLine(new[] { "d4EceYatXTyy8HXPt5B6DT9Rj.wE:u7-b4gch|Example Corporation", "INSTALLFOLDER:oekcr5lq|MsiPackage", "ProgramFilesFolder:PFiles", "TARGETDIR:SourceDir" }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(2)).ToArray()); } }
public void CanBuildBundleWithLargePayload() { var folder = TestData.Get(@"TestData\LargePayload"); // Overwrite the payload with a 2.5 GiB file. We do this dynamically to avoid committing such // a large file to source control. var largeFile = Path.Combine(folder, "data", "large_file.dat"); const long TwoAndAHalfGigabytes = 2_684_354_560; using (var stream = File.Create(largeFile)) { stream.Seek(TwoAndAHalfGigabytes - 1, SeekOrigin.Begin); stream.WriteByte(1); } using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var exePath = Path.Combine(baseFolder, @"bin\test.exe"); var pdbPath = Path.Combine(baseFolder, @"bin\test.wixpdb"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Bundle.wxs"), "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", exePath, }); result.AssertSuccess(); Assert.Empty(result.Messages.Where(m => m.Level == MessageLevel.Warning)); Assert.True(File.Exists(exePath)); Assert.True(File.Exists(pdbPath)); Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\large_file.dat"))); using (var wixOutput = WixOutput.Read(pdbPath)) { var intermediate = Intermediate.Load(wixOutput); var section = intermediate.Sections.Single(); var payloadSymbol = section.Symbols.OfType <WixBundlePayloadSymbol>().Where(x => x.Name == "large_file.dat").Single(); Assert.Equal(TwoAndAHalfGigabytes, payloadSymbol.FileSize); } } File.Delete(largeFile); }
public void LayoutPayloadIsPutInContainer() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var binFolder = Path.Combine(baseFolder, "bin"); var bundlePath = Path.Combine(binFolder, "test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); this.BuildMsis(folder, intermediateFolder, binFolder); var result = WixRunner.Execute(false, new[] { "build", Path.Combine(folder, "Container", "LayoutPayloadInContainer.wxs"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-bindpath", binFolder, "-intermediateFolder", intermediateFolder, "-o", bundlePath }); WixAssert.CompareLineByLine(new string[] { "The layout-only Payload 'SharedPayload' is being added to Container 'FirstX64'. It will not be extracted during layout.", }, result.Messages.Select(m => m.ToString()).ToArray()); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var ignoreAttributes = new Dictionary <string, List <string> > { { "Payload", new List <string> { "FileSize", "Hash" } } }; var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='SharedPayload']") .Cast <XmlElement>() .Select(e => e.GetTestXml(ignoreAttributes)) .ToArray(); WixAssert.CompareLineByLine(new string[] { "<Payload Id='SharedPayload' FilePath='LayoutPayloadInContainer.wxs' FileSize='*' Hash='*' LayoutOnly='yes' Packaging='embedded' SourcePath='a1' Container='FirstX64' />", }, payloads); } }
public void PopulatesControlTables() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "DialogsInInstallUISequence", "PackageComponents.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath, }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "CheckBox", "Control", "ControlCondition", "InstallUISequence" }); WixAssert.CompareLineByLine(new[] { "CheckBox:WIXUI_EXITDIALOGOPTIONALCHECKBOX\t1", "Control:FirstDialog\tHeader\tText\t0\t13\t90\t13\t3\t\tFirstDialogHeader\tTitle\t", "Control:FirstDialog\tTitle\tText\t0\t0\t90\t13\t3\t\tFirstDialogTitle\tHeader\t", "Control:SecondDialog\tOptionalCheckBox\tCheckBox\t0\t13\t100\t40\t2\tWIXUI_EXITDIALOGOPTIONALCHECKBOX\t[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]\tTitle\tOptional checkbox|Check this box for fun", "Control:SecondDialog\tTitle\tText\t0\t0\t90\t13\t3\t\tSecondDialogTitle\tOptionalCheckBox\t", "ControlCondition:FirstDialog\tHeader\tDisable\tInstalled", "ControlCondition:FirstDialog\tHeader\tHide\tInstalled", "ControlCondition:SecondDialog\tOptionalCheckBox\tShow\tWIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed", "InstallUISequence:CostFinalize\t\t1000", "InstallUISequence:CostInitialize\t\t800", "InstallUISequence:ExecuteAction\t\t1300", "InstallUISequence:FileCost\t\t900", "InstallUISequence:FindRelatedProducts\t\t25", "InstallUISequence:FirstDialog\tInstalled AND PATCH\t1298", "InstallUISequence:LaunchConditions\t\t100", "InstallUISequence:MigrateFeatureStates\t\t1200", "InstallUISequence:SecondDialog\tNOT Installed\t1299", "InstallUISequence:ValidateProductID\t\t700", }, results); } }
public void CanBuildWithExtensionUsingWixlib() { var folder = TestData.Get(@"TestData\ExampleExtension"); var extensionPath = Path.GetFullPath(new Uri(typeof(ExampleExtensionFactory).Assembly.CodeBase).LocalPath); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "PackageComponents.wxs"), "-ext", extensionPath, "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"test.wixlib") }); result.AssertSuccess(); result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-lib", Path.Combine(intermediateFolder, @"test.wixlib"), "-ext", extensionPath, "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"bin\test.msi") }); result.AssertSuccess(); var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"test.wir")); var section = intermediate.Sections.Single(); var wixFile = section.Tuples.OfType <WixFileTuple>().Single(); Assert.Equal(Path.Combine(folder, @"data\example.txt"), wixFile[WixFileTupleFields.Source].AsPath().Path); Assert.Equal(@"example.txt", wixFile[WixFileTupleFields.Source].PreviousValue.AsPath().Path); var example = section.Tuples.Where(t => t.Definition.Type == TupleDefinitionType.MustBeFromAnExtension).Single(); Assert.Equal("Foo", example.Id.Id); Assert.Equal("Foo", example[0].AsString()); Assert.Equal("Bar", example[1].AsString()); } }
public void CanBuildInstanceTransform() { var folder = TestData.Get(@"TestData\InstanceTransform"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"bin\test.msi") }); result.AssertSuccess(); var output = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"), false); var substorage = output.SubStorages.Single(); Assert.Equal("I1", substorage.Name); var data = substorage.Data; Assert.Equal(new[] { "_SummaryInformation", "Property", "Upgrade" }, data.Tables.Select(t => t.Name).ToArray()); Assert.Equal(new[] { "INSTANCEPROPERTY\tI1", "ProductName\tMsiPackage (Instance 1)", }, JoinRows(data.Tables["Property"])); Assert.Equal(new[] { "{047730A5-30FE-4A62-A520-DA9381B8226A}\t\t1.0.0.0\t1033\t1\t\tWIX_UPGRADE_DETECTED", "{047730A5-30FE-4A62-A520-DA9381B8226A}\t\t1.0.0.0\t1033\t1\t0\t0", "{047730A5-30FE-4A62-A520-DA9381B8226A}\t1.0.0.0\t\t1033\t2\t\tWIX_DOWNGRADE_DETECTED", "{047730A5-30FE-4A62-A520-DA9381B8226A}\t1.0.0.0\t\t1033\t2\t0\t0" }, JoinRows(data.Tables["Upgrade"])); } }
public void CanBuildSimpleModule() { var folder = TestData.Get(@"TestData\SimpleModule"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Module.wxs"), "-loc", Path.Combine(folder, "Module.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"bin\test.msm") }); result.AssertSuccess(); var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm"); Assert.True(File.Exists(msmPath)); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb"))); var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var fileSymbol = section.Symbols.OfType <FileSymbol>().Single(); Assert.Equal("filyIq8rqcxxf903Hsn5K9L0SWV73g", fileSymbol.Id.Id); Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path); Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path); var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); var fileRows = data.Tables["File"].Rows; Assert.Equal(new[] { "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE" }, fileRows.Select(r => r.FieldAsString(0)).ToArray()); var cabPath = Path.Combine(intermediateFolder, "msm-test.cab"); Query.ExtractStream(msmPath, "MergeModule.CABinet", cabPath); var files = Query.GetCabinetFiles(cabPath); Assert.Equal(new[] { "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE" }, files.Select(f => Path.Combine(f.Path, f.Name)).ToArray()); } }
private static WixRunnerResult RunConversion(string targetFile, bool fixErrors = true, string settingsFile = null) { var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider().AddConverter(); var exitCode = WixRunner.Execute(new[] { "convert", fixErrors ? null : "--dry-run", String.IsNullOrEmpty(settingsFile) ? null : "-set1" + settingsFile, targetFile }, serviceProvider, out var messages); return(new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() }); }
public void PopulatesDirectoryTableWithValidDefaultDir() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", "-sw1031", // this is expected for this test Path.Combine(folder, "DefaultDir", "DefaultDir.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "Directory" }); WixAssert.CompareLineByLine(new[] { "Directory:DUPLICATENAMEANDSHORTNAME\tINSTALLFOLDER\tduplicat", "Directory:Folder1\tINSTALLFOLDER\tFolder.1", "Directory:Folder12\tINSTALLFOLDER\tFolder.12", "Directory:Folder123\tINSTALLFOLDER\tFolder.123", "Directory:Folder1234\tINSTALLFOLDER\tyakwclwy|Folder.1234", "Directory:INSTALLFOLDER\tProgramFiles6432Folder\t1egc1laj|MsiPackage", "Directory:NAMEANDSHORTNAME\tINSTALLFOLDER\tSHORTNAM|NameAndShortName", "Directory:NAMEANDSHORTSOURCENAME\tINSTALLFOLDER\tNAMEASSN|NameAndShortSourceName", "Directory:NAMEWITHSHORTVALUE\tINSTALLFOLDER\tSHORTVAL", "Directory:ProgramFiles6432Folder\tProgramFilesFolder\t.", "Directory:ProgramFilesFolder\tTARGETDIR\tPFiles", "Directory:SHORTNAMEANDLONGSOURCENAME\tINSTALLFOLDER\tSHNALSNM:6ukthv5q|ShortNameAndLongSourceName", "Directory:SHORTNAMEONLY\tINSTALLFOLDER\tSHORTONL", "Directory:SOURCENAME\tINSTALLFOLDER\ts2s5bq-i|NameAndSourceName:dhnqygng|SourceNameWithName", "Directory:SOURCENAMESONLY\tINSTALLFOLDER\t.:SRCNAMON|SourceNameOnly", "Directory:SOURCENAMEWITHSHORTVALUE\tINSTALLFOLDER\t.:SRTSRCVL", "Directory:TARGETDIR\t\tSourceDir", }, results); } }
public void HarvestedPayloadsArePutInCorrectContainer() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var binFolder = Path.Combine(baseFolder, "bin"); var bundlePath = Path.Combine(binFolder, "test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); this.BuildMsis(folder, intermediateFolder, binFolder); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Container", "HarvestIntoDetachedContainer.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-bindpath", binFolder, "-intermediateFolder", intermediateFolder, "-o", bundlePath }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload"); Assert.Equal(4, payloads.Count); var ignoreAttributes = new Dictionary <string, List <string> > { { "Payload", new List <string> { "FileSize", "Hash" } } }; Assert.Equal(@"<Payload Id='FirstX86.msi' FilePath='FirstX86.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />", payloads[0].GetTestXml(ignoreAttributes)); Assert.Equal(@"<Payload Id='FirstX64.msi' FilePath='FirstX64.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a1' Container='FirstX64' />", payloads[1].GetTestXml(ignoreAttributes)); Assert.Equal(@"<Payload Id='fk1m38Cf9RZ2Bx_ipinRY6BftelU' FilePath='PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a2' Container='WixAttachedContainer' />", payloads[2].GetTestXml(ignoreAttributes)); Assert.Equal(@"<Payload Id='fC0n41rZK8oW3JK8LzHu6AT3CjdQ' FilePath='PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a3' Container='FirstX64' />", payloads[3].GetTestXml(ignoreAttributes)); } }
public void CanBuildMultiMedia() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Media", "MultiMedia.wxs"), "-bindpath", Path.Combine(folder, "Media", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var mediaSymbols = section.Symbols.OfType <WixToolset.Data.Symbols.MediaSymbol>().OrderBy(m => m.DiskId).ToList(); var fileSymbols = section.Symbols.OfType <WixToolset.Data.Symbols.FileSymbol>().OrderBy(f => f.Sequence).ToList(); Assert.Equal(1, mediaSymbols[0].DiskId); Assert.Equal(2, mediaSymbols[0].LastSequence); Assert.Equal(2, mediaSymbols[1].DiskId); Assert.Equal(4, mediaSymbols[1].LastSequence); Assert.Equal(new[] { "a1.txt", "a2.txt", "b1.txt", "b2.txt", }, fileSymbols.Select(f => f.Name).ToArray()); Assert.Equal(new[] { 1, 2, 3, 4, }, fileSymbols.Select(f => f.Sequence).ToArray()); } }
public void CanGetWithMultiNestedSubdirectory() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", "-arch", "x64", Path.Combine(folder, "Directory", "Nested.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var dirSymbols = section.Symbols.OfType <WixToolset.Data.Symbols.DirectorySymbol>().ToList(); Assert.Equal(new[] { "BinFolder:ProgramFilesFolder:Example Corporation\\Test Product\\bin", "ProgramFilesFolder:TARGETDIR:PFiles", "TARGETDIR::SourceDir" }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray()); var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var directoryRows = data.Tables["Directory"].Rows; Assert.Equal(new[] { "d4EceYatXTyy8HXPt5B6DT9Rj.wE:ProgramFilesFolder:u7-b4gch|Example Corporation", "dSJ1pgiASlW7kJTu0wqsGBklJsS0:d4EceYatXTyy8HXPt5B6DT9Rj.wE:vjj-gxay|Test Product", "BinFolder:dSJ1pgiASlW7kJTu0wqsGBklJsS0:bin", "ProgramFilesFolder:TARGETDIR:PFiles", "TARGETDIR::SourceDir" }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).ToArray()); } }
public void CanBuildWithCustomAttachedContainer() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var binFolder = Path.Combine(baseFolder, "bin"); var bundlePath = Path.Combine(binFolder, "test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); this.BuildMsis(folder, intermediateFolder, binFolder, buildToSubfolder: true); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Container", "HarvestIntoAttachedContainer.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-bindpath", binFolder, "-intermediateFolder", intermediateFolder, "-o", bundlePath }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload"); Assert.Equal(4, payloads.Count); var ignoreAttributes = new Dictionary <string, List <string> > { { "Payload", new List <string> { "FileSize", "Hash" } } }; Assert.Equal(@"<Payload Id='FirstX64' FilePath='FirstX64\FirstX64.msi' FileSize='*' Hash='*' DownloadUrl='http://example.com//FirstX64/FirstX64/FirstX64.msi' Packaging='embedded' SourcePath='a0' Container='BundlePackages' />", payloads[0].GetTestXml(ignoreAttributes)); Assert.Equal(@"<Payload Id='FirstX86.msi' FilePath='FirstX86\FirstX86.msi' FileSize='*' Hash='*' DownloadUrl='http://example.com//FirstX86.msi/FirstX86/FirstX86.msi' Packaging='embedded' SourcePath='a1' Container='BundlePackages' />", payloads[1].GetTestXml(ignoreAttributes)); Assert.Equal(@"<Payload Id='fk1m38Cf9RZ2Bx_ipinRY6BftelU' FilePath='FirstX86\PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' DownloadUrl='http://example.com/FirstX86/fk1m38Cf9RZ2Bx_ipinRY6BftelU/FirstX86/PFiles/MsiPackage/test.txt' Packaging='embedded' SourcePath='a2' Container='BundlePackages' />", payloads[2].GetTestXml(ignoreAttributes)); Assert.Equal(@"<Payload Id='ff2L_N_DLQ.nSUi.l8LxG14gd2V4' FilePath='FirstX64\PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' DownloadUrl='http://example.com/FirstX64/ff2L_N_DLQ.nSUi.l8LxG14gd2V4/FirstX64/PFiles/MsiPackage/test.txt' Packaging='embedded' SourcePath='a3' Container='BundlePackages' />", payloads[3].GetTestXml(ignoreAttributes)); } }
public void CanBuildBundleWithCustomProviderKey() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var binFolder = Path.Combine(baseFolder, "bin"); var bundlePath = Path.Combine(binFolder, "test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Dependency", "CustomProviderKeyBundle.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-intermediateFolder", intermediateFolder, "-o", bundlePath, }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var ignoreAttributesByElementName = new Dictionary <string, List <string> > { { "Registration", new List <string> { "Id" } }, }; var registration = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Registration") .Cast <XmlElement>() .Select(e => e.GetTestXml(ignoreAttributesByElementName)) .ToArray(); WixAssert.CompareLineByLine(new string[] { "<Registration Id='*' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='MyProviderKey,v1.0'><Arp Register='yes' DisplayName='BurnBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' /></Registration>", }, registration); } }
public void PopulatesManifestWithBundleExtension() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "BundleExtension", "BundleExtension.wxs"), Path.Combine(folder, "BundleExtension", "SimpleBundleExtension.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "MinimalPackageGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-intermediateFolder", intermediateFolder, "-o", bundlePath }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var bundleExtensions = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:BundleExtension"); Assert.Equal(1, bundleExtensions.Count); Assert.Equal("<BundleExtension Id='ExampleBext' EntryPayloadId='ExampleBext' />", bundleExtensions[0].GetTestXml()); var bundleExtensionPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:UX/burn:Payload[@Id='ExampleBext']"); Assert.Equal(1, bundleExtensionPayloads.Count); var ignored = new Dictionary <string, List <string> > { { "Payload", new List <string> { "FileSize", "Hash", "SourcePath" } }, }; Assert.Equal("<Payload Id='ExampleBext' FilePath='fakebext.dll' FileSize='*' Hash='*' Packaging='embedded' SourcePath='*' />", bundleExtensionPayloads[0].GetTestXml(ignored)); } }
public void CanMergeModule() { var folder = TestData.Get(@"TestData\SimpleMerge"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var msiPath = Path.Combine(intermediateFolder, @"bin\test.msi"); var cabPath = Path.Combine(intermediateFolder, @"bin\cab1.cab"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, ".data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb"))); var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); Assert.Empty(section.Symbols.OfType <FileSymbol>()); var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); Assert.Null(data.Tables["File"]); var results = Query.QueryDatabase(msiPath, new[] { "File" }); Assert.Equal(new[] { "File:filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE\tModuleComponent.243FB739_4D05_472F_9CFB_EF6B1017B6DE\ttest.txt\t17\t\t\t512\t0" }, results); var files = Query.GetCabinetFiles(cabPath); Assert.Equal(new[] { "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE" }, files.Select(f => f.Name).ToArray()); } }
public void CanBuildX64Bundle() { var folder = TestData.Get(@"TestData\SimpleBundle"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var exePath = Path.Combine(baseFolder, @"bin\test.exe"); var pdbPath = Path.Combine(baseFolder, @"bin\test.wixpdb"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(false, new[] // TODO: go back to elevating warnings as errors. { "build", "-arch", "x64", Path.Combine(folder, "Bundle.wxs"), "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", exePath, }); result.AssertSuccess(); var warning = Assert.Single(result.Messages.Where(m => m.Level == MessageLevel.Warning)); Assert.Equal((int)WarningMessages.Ids.ExperimentalBundlePlatform, warning.Id); Assert.True(File.Exists(exePath)); Assert.True(File.Exists(pdbPath)); var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033); manifestResource.Load(exePath); var actualManifestData = Encoding.UTF8.GetString(manifestResource.Data); Assert.Equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">" + "<assemblyIdentity name=\"test.exe\" version=\"1.0.0.0\" processorArchitecture=\"amd64\" type=\"win32\" />" + "<description>~TestBundle</description>" + "<dependency><dependentAssembly><assemblyIdentity name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"amd64\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\" type=\"win32\" /></dependentAssembly></dependency>" + "<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\"><application><supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" /><supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" /><supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" /><supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" /><supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" /></application></compatibility>" + "<trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\"><security><requestedPrivileges><requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" /></requestedPrivileges></security></trustInfo>" + "<application xmlns=\"urn:schemas-microsoft-com:asm.v3\"><windowsSettings><dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware><dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2, PerMonitor</dpiAwareness></windowsSettings></application>" + "</assembly>", actualManifestData); } }
public void CanGetDefaultName() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Directory", "DefaultName.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var dirSymbols = section.Symbols.OfType <WixToolset.Data.Symbols.DirectorySymbol>().ToList(); WixAssert.CompareLineByLine(new[] { "BinFolder\tCompanyFolder\t.", "CompanyFolder\tProgramFilesFolder\tExample Corporation", "ProgramFilesFolder\tTARGETDIR\tPFiles", "TARGETDIR\t\tSourceDir" }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => String.Join('\t', d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray()); var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var directoryRows = data.Tables["Directory"].Rows; WixAssert.CompareLineByLine(new[] { "BinFolder\tCompanyFolder\t.", "CompanyFolder\tProgramFilesFolder\tu7-b4gch|Example Corporation", "ProgramFilesFolder\tTARGETDIR\tPFiles", "TARGETDIR\t\tSourceDir" }, directoryRows.Select(r => String.Join('\t', r.FieldAsString(0), r.FieldAsString(1), r.FieldAsString(2))).ToArray()); } }
public void CanSpecifyPackagePayloadInPayloadGroup() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "PackagePayload", "PackagePayloadInPayloadGroup.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-bindpath", Path.Combine(folder, ".Data"), "-intermediateFolder", intermediateFolder, "-o", bundlePath, }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var exePackageElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage"); var ignoreAttributesByElementName = new Dictionary <string, List <string> > { { "ExePackage", new List <string> { "CacheId", "InstallSize", "Size" } }, }; Assert.Equal(1, exePackageElements.Count); Assert.Equal("<ExePackage Id='PackagePayloadInPayloadGroup' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_PackagePayloadInPayloadGroup' RollbackLogPathVariable='WixBundleRollbackLog_PackagePayloadInPayloadGroup' DetectCondition='none' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='burn.exe' /></ExePackage>", exePackageElements[0].GetTestXml(ignoreAttributesByElementName)); var payloadElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='burn.exe']"); Assert.Equal(1, payloadElements.Count); Assert.Equal("<Payload Id='burn.exe' FilePath='burn.exe' FileSize='463360' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />", payloadElements[0].GetTestXml()); } }
private static string BuildMsp(string outputName, string sourceFolder, string baseFolder, string defineV) { var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName)); var result = WixRunner.Execute(new[] { "build", Path.Combine(sourceFolder, @"Patch.wxs"), "-d", "V=" + defineV, "-bindpath", Path.Combine(baseFolder, "bin"), "-intermediateFolder", Path.Combine(baseFolder, "obj"), "-o", outputPath }); result.AssertSuccess(); return(Path.ChangeExtension(outputPath, ".wixpdb")); }
public void ErrorWhenRequireDetectCondition() { var folder = TestData.Get(@"TestData", "ExePackage"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "RequireDetectCondition.wxs"), "-o", Path.Combine(baseFolder, "test.wixlib") }); Assert.Equal(401, result.ExitCode); } }
public void CanBuildManualUpgrade() { var folder = TestData.Get(@"TestData\ManualUpgrade"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"bin\test.msi") }, out var messages); Assert.Equal(0, result); var pdbPath = Path.Combine(intermediateFolder, @"bin\test.wixpdb"); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.msi"))); Assert.True(File.Exists(pdbPath)); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\MsiPackage\test.txt"))); var intermediate = Intermediate.Load(pdbPath); var section = intermediate.Sections.Single(); var upgradeSymbol = section.Symbols.OfType <UpgradeSymbol>().Single(); Assert.False(upgradeSymbol.ExcludeLanguages); Assert.True(upgradeSymbol.IgnoreRemoveFailures); Assert.False(upgradeSymbol.VersionMaxInclusive); Assert.True(upgradeSymbol.VersionMinInclusive); Assert.Equal("13.0.0", upgradeSymbol.VersionMax); Assert.Equal("12.0.0", upgradeSymbol.VersionMin); Assert.False(upgradeSymbol.OnlyDetect); Assert.Equal("BLAHBLAHBLAH", upgradeSymbol.ActionProperty); var pdb = WindowsInstallerData.Load(pdbPath, suppressVersionCheck: false); var secureProperties = pdb.Tables["Property"].Rows.Where(row => row.GetKey() == "SecureCustomProperties").Single(); Assert.Contains("BLAHBLAHBLAH", secureProperties.FieldAsString(1)); } }
public void PopulatesCustomTableWithFilePathSerialized() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var wixlibPath = Path.Combine(baseFolder, @"bin\test.wixlib"); var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "CustomTable", "CustomTableWithFile.wxs"), "-bindpath", Path.Combine(folder, "CustomTable", "data"), "-intermediateFolder", intermediateFolder, "-o", wixlibPath }); result.AssertSuccess(); result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-lib", wixlibPath, "-bindpath", Path.Combine(folder, "CustomTable", "data"), "-intermediateFolder", intermediateFolder, "-o", msiPath }); result.AssertSuccess(); Assert.True(File.Exists(msiPath)); var results = Query.QueryDatabase(msiPath, new[] { "CustomTableWithFile" }); Assert.Equal(new[] { "CustomTableWithFile:Row1\t[Binary data]", "CustomTableWithFile:Row2\t[Binary data]", }, results); } }
public void PopulatesBAManifestWithPayloadInformation() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(false, new[] { "build", Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, ".Data"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-intermediateFolder", intermediateFolder, "-o", bundlePath }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var payloadElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPayloadProperties"); var ignoreAttributesByElementName = new Dictionary <string, List <string> > { { "WixPayloadProperties", new List <string> { "Size" } }, }; Assert.Equal(4, payloadElements.Count); Assert.Equal("<WixPayloadProperties Package='credwiz.exe' Payload='SourceFilePayload' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[0].GetTestXml(ignoreAttributesByElementName)); Assert.Equal("<WixPayloadProperties Package='credwiz.exe' Payload='credwiz.exe' Container='WixAttachedContainer' Name='credwiz.exe' Size='*' LayoutOnly='no' />", payloadElements[1].GetTestXml(ignoreAttributesByElementName)); Assert.Equal("<WixPayloadProperties Package='cscript.exe' Payload='SourceFilePayload' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[2].GetTestXml(ignoreAttributesByElementName)); Assert.Equal("<WixPayloadProperties Package='cscript.exe' Payload='cscript.exe' Container='WixAttachedContainer' Name='cscript.exe' Size='*' LayoutOnly='no' />", payloadElements[3].GetTestXml(ignoreAttributesByElementName)); } }
public void CanBuildVersionIndependentProgId() { var folder = TestData.Get(@"TestData\ProgId"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var result = WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(baseFolder, @"bin\test.msi") }); result.AssertSuccess(); Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.msi"))); Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\MsiPackage\Foo.exe"))); var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); var section = intermediate.Sections.Single(); var progids = section.Symbols.OfType <ProgIdSymbol>().OrderBy(symbol => symbol.ProgId).ToList(); Assert.Equal(new[] { "Foo.File.hol", "Foo.File.hol.15" }, progids.Select(p => p.ProgId).ToArray()); Assert.Equal(new[] { "Foo.File.hol.15", null }, progids.Select(p => p.ParentProgIdRef).ToArray()); } }
private static string BuildBundle(string outputName, string sourceFolder, string baseFolder) { var outputPath = Path.Combine(baseFolder, Path.Combine("bin", outputName)); var result = WixRunner.Execute(new[] { "build", Path.Combine(sourceFolder, @"Bundle.wxs"), Path.Combine(sourceFolder, "..", "..", "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(sourceFolder, "..", "..", "SimpleBundle", "data"), "-bindpath", Path.Combine(baseFolder, "bin"), "-intermediateFolder", Path.Combine(baseFolder, "obj"), "-o", outputPath }); result.AssertSuccess(); return(Path.ChangeExtension(outputPath, ".wixpdb")); }
public void CannotBuildWithMissingVersionedExtension() { var folder = TestData.Get(@"TestData\ExampleExtension"); using (var fs = new DisposableFileSystem()) { var intermediateFolder = fs.GetFolder(); var exception = Assert.Throws <WixException>(() => WixRunner.Execute(new[] { "build", Path.Combine(folder, "Package.wxs"), "-ext", "ExampleExtension.DoesNotExist/1.0.0" })); Assert.StartsWith("The extension 'ExampleExtension.DoesNotExist/1.0.0' could not be found. Checked paths: ", exception.Message); } }
public void PopulatesBAManifestWithPackageInformation() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(false, new[] { "build", Path.Combine(folder, "CustomPackageDescription", "CustomPackageDescription.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, ".Data"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-intermediateFolder", intermediateFolder, "-o", bundlePath }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var packageElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPackageProperties"); var ignoreAttributesByElementName = new Dictionary <string, List <string> > { { "WixPackageProperties", new List <string> { "DownloadSize", "PackageSize", "InstalledSize", "Version" } }, }; Assert.Equal(3, packageElements.Count); Assert.Equal("<WixPackageProperties Package='burn.exe' Vital='yes' DisplayName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' Compressed='yes' Version='*' Cache='keep' />", packageElements[0].GetTestXml(ignoreAttributesByElementName)); Assert.Equal("<WixPackageProperties Package='RemotePayloadExe' Vital='yes' DisplayName='Override RemotePayload display name' Description='Override RemotePayload description' DownloadSize='1' PackageSize='1' InstalledSize='1' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_RemotePayloadExe' RollbackLogPathVariable='WixBundleRollbackLog_RemotePayloadExe' Compressed='no' Version='1.0.0.0' Cache='keep' />", packageElements[1].GetTestXml()); Assert.Equal("<WixPackageProperties Package='calc.exe' Vital='yes' DisplayName='Override harvested display name' Description='Override harvested description' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_calc.exe' RollbackLogPathVariable='WixBundleRollbackLog_calc.exe' Compressed='yes' Version='*' Cache='keep' />", packageElements[2].GetTestXml(ignoreAttributesByElementName)); } }
public void PopulatesManifestWithExePackages() { var folder = TestData.Get(@"TestData"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); var result = WixRunner.Execute(false, new[] { "build", Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"), Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), "-bindpath", Path.Combine(folder, ".Data"), "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), "-intermediateFolder", intermediateFolder, "-o", bundlePath }); result.AssertSuccess(); Assert.True(File.Exists(bundlePath)); var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); extractResult.AssertSuccess(); var exePackageElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage"); var ignoreAttributesByElementName = new Dictionary <string, List <string> > { { "ExePackage", new List <string> { "CacheId", "InstallSize", "Size" } }, }; Assert.Equal(2, exePackageElements.Count); Assert.Equal("<ExePackage Id='credwiz.exe' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_credwiz.exe' RollbackLogPathVariable='WixBundleRollbackLog_credwiz.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='credwiz.exe' /><PayloadRef Id='SourceFilePayload' /></ExePackage>", exePackageElements[0].GetTestXml(ignoreAttributesByElementName)); Assert.Equal("<ExePackage Id='cscript.exe' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_cscript.exe' RollbackLogPathVariable='WixBundleRollbackLog_cscript.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='cscript.exe' /><PayloadRef Id='SourceFilePayload' /></ExePackage>", exePackageElements[1].GetTestXml(ignoreAttributesByElementName)); } }