From 6f6e4ced9f398ff37a44b91fdba62479cde29d06 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 9 Jun 2022 15:30:48 -0500 Subject: Implement ArpEntry flavored ExePackage. 6772 --- .../burn/WixToolsetTest.BurnE2E/ExePackageTests.cs | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/test/burn/WixToolsetTest.BurnE2E/ExePackageTests.cs (limited to 'src/test/burn/WixToolsetTest.BurnE2E/ExePackageTests.cs') diff --git a/src/test/burn/WixToolsetTest.BurnE2E/ExePackageTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/ExePackageTests.cs new file mode 100644 index 00000000..dc6515b5 --- /dev/null +++ b/src/test/burn/WixToolsetTest.BurnE2E/ExePackageTests.cs @@ -0,0 +1,99 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.BurnE2E +{ + using WixTestTools; + using Xunit; + using Xunit.Abstractions; + + public class ExePackageTests : BurnE2ETests + { + public ExePackageTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } + + [RuntimeFact] + public void CanInstallAndUninstallPerMachineArpEntryExePackage() + { + const string arpId = "{4D9EC36A-1E63-4244-875C-3ECB0A2CAE30}"; + var perMachineArpEntryExePackageBundle = this.CreateBundleInstaller(@"PerMachineArpEntryExePackage"); + var arpEntryExePackage = this.CreateArpEntryInstaller(perMachineArpEntryExePackageBundle, "TestExe"); + + arpEntryExePackage.VerifyRegistered(false); + + var installLogPath = perMachineArpEntryExePackageBundle.Install(); + perMachineArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache(); + arpEntryExePackage.VerifyRegistered(true); + + LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\""); + + var uninstallLogPath = perMachineArpEntryExePackageBundle.Uninstall(); + perMachineArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache(); + arpEntryExePackage.VerifyRegistered(false); + + LogVerifier.MessageInLogFile(uninstallLogPath, $"testexe.exe\" /regd HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}"); + } + + [RuntimeFact] + public void CanUninstallPerMachineArpEntryExePackageOnRollback() + { + const string arpId = "{80E90929-EEA5-48A7-A680-A0237A1CAD84}"; + var perMachineArpEntryExePackageFailureBundle = this.CreateBundleInstaller(@"PerMachineArpEntryExePackageFailure"); + var arpEntryExePackage = this.CreateArpEntryInstaller(perMachineArpEntryExePackageFailureBundle, "TestExe"); + + arpEntryExePackage.VerifyRegistered(false); + + var installLogPath = perMachineArpEntryExePackageFailureBundle.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE); + perMachineArpEntryExePackageFailureBundle.VerifyUnregisteredAndRemovedFromPackageCache(); + arpEntryExePackage.VerifyRegistered(false); + + LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\""); + LogVerifier.MessageInLogFile(installLogPath, $"testexe.exe\" /regd HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}"); + } + + [RuntimeFact] + public void CanInstallAndUninstallPerUserArpEntryExePackage() + { + const string arpId = "{9B5300C7-9B34-4670-9614-185B02AB87EF}"; + var perUserArpEntryExePackageBundle = this.CreateBundleInstaller(@"PerUserArpEntryExePackage"); + var arpEntryExePackage = this.CreateArpEntryInstaller(perUserArpEntryExePackageBundle, "TestExe"); + + arpEntryExePackage.VerifyRegistered(false); + + var installLogPath = perUserArpEntryExePackageBundle.Install(); + perUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache(); + arpEntryExePackage.VerifyRegistered(true); + + LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\""); + + var uninstallLogPath = perUserArpEntryExePackageBundle.Uninstall(); + perUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache(); + arpEntryExePackage.VerifyRegistered(false); + + LogVerifier.MessageInLogFile(uninstallLogPath, $"testexe.exe\" /regd HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}"); + } + + [RuntimeFact] + public void FailsUninstallWhenPerUserArpEntryExePackageMissingQuietUninstallString() + { + const string arpId = "{DE9F8594-5856-4454-AB10-3C01ED246D7D}"; + var brokenPerUserArpEntryExePackageBundle = this.CreateBundleInstaller(@"BrokenPerUserArpEntryExePackage"); + var arpEntryExePackage = this.CreateArpEntryInstaller(brokenPerUserArpEntryExePackageBundle, "TestExe"); + + arpEntryExePackage.VerifyRegistered(false); + brokenPerUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache(); + + var installLogPath = brokenPerUserArpEntryExePackageBundle.Install(); + brokenPerUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache(); + arpEntryExePackage.VerifyRegistered(true); + + LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\""); + + brokenPerUserArpEntryExePackageBundle.Uninstall((int)MSIExec.MSIExecReturnCode.ERROR_INVALID_PARAMETER); + brokenPerUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache(); + + arpEntryExePackage.Unregister(); + + brokenPerUserArpEntryExePackageBundle.Uninstall(); + brokenPerUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache(); + } + } +} -- cgit v1.2.3-55-g6feb