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 dirSymbols = section.Symbols.OfType <DirectorySymbol>().OrderBy(d => d.Id.Id).ToList(); WixAssert.CompareLineByLine(new[] { "MergeRedirectFolder\tTARGETDIR\t.", "NotTheMergeRedirectFolder\tTARGETDIR\t.", "TARGETDIR\t\tSourceDir" }, dirSymbols.Select(d => String.Join("\t", d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray()); var fileSymbols = section.Symbols.OfType <FileSymbol>().OrderBy(d => d.Id.Id).ToList(); WixAssert.CompareLineByLine(new[] { $"File1\t{Path.Combine(folder, @"data\test.txt")}\ttest.txt", $"File2\t{Path.Combine(folder, @"data\test.txt")}\ttest.txt", }, fileSymbols.Select(fileSymbol => String.Join("\t", fileSymbol.Id.Id, fileSymbol[FileSymbolFields.Source].AsPath().Path, fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path)).ToArray()); var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); var fileRows = data.Tables["File"].Rows; Assert.Equal(new[] { "File1.243FB739_4D05_472F_9CFB_EF6B1017B6DE", "File2.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[] { "File1.243FB739_4D05_472F_9CFB_EF6B1017B6DE", "File2.243FB739_4D05_472F_9CFB_EF6B1017B6DE", }, files.Select(f => Path.Combine(f.Path, f.Name)).ToArray()); } }
public void CanLoadPdbGeneratedByBuildViaWixOutput() { var folder = TestData.Get(@"TestData\MultiFileCompressed"); 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"), "-d", "MediaTemplateCompressionLevel", "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(intermediateFolder, @"bin\test.msi") }); result.AssertSuccess(); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.msi"))); Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\cab1.cab"))); var pdbPath = Path.Combine(intermediateFolder, @"bin\test.wixpdb"); Assert.True(File.Exists(pdbPath)); var wixOutput = WixOutput.Read(pdbPath); var output = WindowsInstallerData.Load(wixOutput, suppressVersionCheck: true); Assert.NotNull(output); } }
public void CanBuildSetProperty() { var folder = TestData.Get(@"TestData\SetProperty"); 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(); var output = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"), false); var caRows = output.Tables["CustomAction"].Rows.Single(); Assert.Equal("SetINSTALLLOCATION", caRows.FieldAsString(0)); Assert.Equal("51", caRows.FieldAsString(1)); Assert.Equal("INSTALLLOCATION", caRows.FieldAsString(2)); Assert.Equal("[INSTALLFOLDER]", caRows.FieldAsString(3)); } }
private WindowsInstallerData GetWindowsInstallerData() { if (this.WiData == null) { using var wixOutput = WixOutput.Read(this.PackagePdb); this.WiData = WindowsInstallerData.Load(wixOutput); } return(this.WiData); }
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 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()); } }
public PackageInstaller(WixTestContext testContext, string filename) { this.Package = Path.Combine(testContext.TestDataFolder, $"{filename}.msi"); this.PackagePdb = Path.Combine(testContext.TestDataFolder, $"{filename}.wixpdb"); this.TestContext = testContext; using var wixOutput = WixOutput.Read(this.PackagePdb); var intermediate = Intermediate.Load(wixOutput); var section = intermediate.Sections.Single(); var platformSummary = section.Symbols.OfType <SummaryInformationSymbol>().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); var platformString = platformSummary.Value.Split(new char[] { ';' }, 2)[0]; this.IsX64 = platformString != "Intel"; this.WiData = WindowsInstallerData.Load(wixOutput); }
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 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 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 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)); } }
private WindowsInstallerData GetData(string path) { var ext = Path.GetExtension(path); if (".msi".Equals(ext, StringComparison.OrdinalIgnoreCase)) { using (var database = new Database(path, OpenDatabase.ReadOnly)) { var exportBasePath = Path.Combine(this.IntermediateFolder, "_msi"); // TODO: come up with a better path. var isAdminImage = false; // TODO: need a better way to set this var command = new UnbindDatabaseCommand(this.Messaging, this.BackendHelper, database, path, OutputType.Product, exportBasePath, this.IntermediateFolder, isAdminImage, suppressDemodularization: true, skipSummaryInfo: true); return(command.Execute()); } } else // assume .wixpdb (or .wixout) { var data = WindowsInstallerData.Load(path, true); return(data); } }